SEAM框架之我见--pageflow

 同样作为Jboss家族的重要成员之一,jbpm是一个著名的Business process management 引擎。以前大家多把它用于工作流,在seam中jbpm还被用于pageflow—页面流。
一、 概念:
页面流用来定义一系列复杂的用户交互,这些交互在单一用户同系统之间,在同一个conversation范围内,完成一项具体的任务。
既然Seam框架前端表示层用的是JSF,不使用jbpm,用jsf页面导航规则,同样可以定义页面流。如果应用更多基于数据驱动,而不是流程驱动,用jsf页面导航,可能是一个更好的选择。但从实践中发现,用图形方式表示一系列复杂的用户交互,逻辑更清晰,程序也更健壮。
二、 用法:
上面已介绍在seam中可用到两种页面导航规则—jsf导航规则和JPDL(jbpm流程定义语言),这两种规则和各自环境相对应,jsf导航规则用于无状态模型环境,jpdl页面流用于有状态模型环境。在一个复杂应用中,可能混和应用这两种规则。下面以我在关于seam conversation中用户注册的例子为例讲述pageflow的用法
1. 定义
Jpdl pageflow流程图:

(见附件)
 
由流程图可知,用户注册任务包含四个页面:帐号信息页面、联系信息页面、信用卡信息页面、最后结果页面。帐号信息页面流转到联系信息页面时,系统会检查密码是否一致。
Jpdl文件:

<pageflow-definition name="newuser"></pageflow-definition>
    <start-state name="start"></start-state>
        <transition to="account"> </transition>
   
   
    <page name="account" view-id="/newuser/account.xhtml"></page>
        <redirect></redirect>
        <transition name="next" to="checkPassword"> </transition>
   

    <decision name="checkPassword" expression="#{editCustomer.validNamePassword}"></decision>
        <transition name="true" to="contact"> </transition>
        <transition name="false" to="account"> </transition>            
       
   


    <page name="contact" view-id="/newuser/contact.xhtml"></page>           no-conversation-view-id="/newuser/account.xhtml">
        <redirect></redirect>
        <transaction to="contact"> </transaction>
        <transition name="prev" to="account"> </transition>
        <transition name="next" to="card"> </transition>
   

    <page name="card" view-id="/newuser/card.xhtml"></page>           no-conversation-view-id="/newuser/account.xhtml">
        <redirect></redirect>
        <transition name="prev" to="contact"> </transition>
        <transition name="next" to="complete"> </transition>
            <action expression="#{editCustomer.saveUser}"></action>
       
   
   
    <page name="complete" view-id="/newuser/complete.xhtml"></page>           no-conversation-view-id="/newuser/account.xhtml">
        <redirect></redirect>
        <end-conversation></end-conversation>
   
   

   <page name="contact" view-id="/newuser/contact.xhtml"></page> 2. 开始
通过在一个部件所属方法中指定@Begin,@BeginTask,@StartTask标注开始页面流。如本例:
@Begin(pageflow="newuser")
      public void startEdit() {…
    }
如上述jpdl页面流文件:以<start-state></start-state>开始节点,这种方式用于页面流由一个事件触发引起。还有一种可能是页面流是在响应页面呈现时开始,这种方式下,jpdl页面流文件用<start-page></start-page>开始节点。
3. 节点及转换
每个页面节点代表一个等待用户输入的状态。
<page name="account" view-id="/newuser/account.xhtml"></page> <page name="account" view-id="/newuser/account.xhtml"></page>
          <redirect></redirect>
           <transition name="next" to="checkPassword"> </transition>

转换是在页面上点击命令按钮或命令链接触发的,如此例,当用户点击如下按钮触发下一步时,jbpm流程引擎激活此转换进入下一步.
<h:commandbutton value="Continue" action="next"></h:commandbutton> <h:commandbutton value="Continue" action="next"></h:commandbutton>
4. 控制
<decision></decision>节点用于在jpdl页面流中起控制作用。
<decision name="checkPassword" expression="#{editCustomer.validNamePassword}"></decision><decision name="checkPassword" expression="#{editCustomer.validNamePassword}"></decision>
           <transition name="true" to="contact"> </transition>
           <transition name="false" to="account"> </transition>            
            
                  
      
5. 结束
要结束一个页面流,一般通过在页面中设置<end-conversation></end-conversation>的方式,当流经该页面时,流程结束。
6. 系统配置
要在seam运用页面流,要用到一个jbpm相关的部件,此部件是一个seam内置对象,开发人员所要做的工作只是类似如下配置component.xml文件:<component class="“org.jboss.seam.core.Jbpm”"><component class="“org.jboss.seam.core.Jbpm”"><component class="“org.jboss.seam.core.Jbpm”">
<property name="”pageflowDefinitions”"><component class=“org.jboss.seam.core.Jbpm”>
<property name=“pageflowDefinitions”>newuser.jpdl.xml</property>
</component>
</property> </component></component></component>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值