`
wateriness
  • 浏览: 17470 次
  • 来自: ...
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

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>

  • 大小: 21.3 KB
分享到:
评论
2 楼 david4034647 2008-07-02  
  
1 楼 yangzhihuan 2007-04-18  
其实BEA的WorkShop工具有一个页面流的框架(PageFlow)是基于Struts的,早就使用了anotation的做法,不使用struts的xml配置文件,不过这个框架以前只能运行在weblogic服务器上的,现在好像也捐出了appache,好像叫做Beehive项目.不过彼页面流不同此页面流...

相关推荐

    seam_reference英文文档,讲解Seam更详细

    Seam框架旨在简化企业级Java应用程序的开发过程,通过提供一系列高级功能,如上下文感知组件(Contextual Components)、会话管理(Conversations)、页面流(Page Flow)等,帮助开发者构建更为灵活、高效的应用...

    seam的使用说明文档

    - **理解代码**:该示例通过数字猜谜游戏的方式,展示了Seam页面流(Page Flow)的概念。通过对示例代码的分析,可以了解页面流是如何组织页面逻辑的。 - **工作原理**:Seam页面流通过一系列预定义的步骤来引导用户...

    Practical_JBoss_Seam书的源代码

    3. **pageflow**:Page Flow通常指的是页面导航和用户交互的控制结构。在Seam中,这可能涉及到使用Seam的导航规则和事件驱动的页面管理,帮助开发者实现动态和灵活的Web界面。 4. **security**:这部分源码可能展示...

    jboss seam 中文文档

    - **工作原理**:详细介绍了注册示例背后的实现逻辑和技术细节,例如如何使用 Seam 的组件来封装业务逻辑,以及如何利用 Seam 的页面流(Page Flow)特性来管理用户的导航路径。 ##### 1.3 可点击的列表:消息示例 -...

    Seam入门

    Seam框架的核心优势之一在于它能够无缝地将JSF与EJB3.0进行整合。这意味着开发者可以在保持原有JSF视图层不变的情况下,轻松地利用EJB3.0的强大功能,如事务管理和持久性服务等。这种整合方式极大地提高了开发效率,...

    seam2.1说明文档

    通过这个示例,我们可以了解 Seam 2.1 中的页面流(Page Flow)概念,以及它是如何被用来构建一个多步骤的用户交互过程。 - **Understanding the code**:介绍页面流的定义方式以及如何在 Seam 2.1 中配置导航规则...

    Seam2.0 中文手册

    Seam2.0的核心概念包括页面流(Page Flow)、会话范围(Conversation Scope)、事件(Event)以及组件(Component)。其中: - **页面流**:用于组织和管理用户界面的导航流程,它使得页面之间的跳转更加有序和可...

    JBOSS SEAM

    接下来的部分继续深入探讨Seam的其他高级特性,包括点击列表、工作流集成、RESTful服务支持等,这些特性进一步增强了Seam框架的能力,使其成为Java EE领域内极具竞争力的开发工具。通过学习Seam的各种示例,开发者...

    IDEA教程中文版。

    - **JBoss Seam Pageflow/Page**: 提供 JBoss Seam 框架的支持。 - **Playframework**: 支持 Play 框架,这是一个全栈式的 Java Web 框架。 - **Spring Integration Patterns**: 支持 Spring 企业集成框架。 - **...

    jbpm介绍jbpm介绍jbpm介绍jbpm介绍jbpm介绍

    4. **支持多种流程定义语言**:如 jPDL、WS-BPEL 和 Seam 框架的 Pageflow。 5. **严格的流程版本控制**:确保流程变更的跟踪与管理。 6. **支持 JAAS 安全认证机制**:保证商业流程的安全性。 7. **技术支持**:...

    jbpm选择理由及其优势

    它不仅能够在任何JavaEE应用服务器或简单的JDBC配置的JVM中运行,还支持多种可执行流程语言,如jPDL、WS-BPEL以及Seam框架的Pageflow。其核心优势体现在以下十个方面: 1. **嵌入式工作流引擎**:jBPM采用嵌入式...

    jbpm简介\jbpm简介

    4. **支持多种流程定义语言**:除了默认支持的jPDL、WS-BPEL和Seam框架的Pageflow外,jBPM还计划支持更多流程定义语言,以适应不同的业务场景需求。 5. **严格的流程版本控制**:jBPM提供了严格的版本控制机制,...

    JBPM工作流应用开发文档

    jBPM4支持多种流程定义语言,如jPDL、BPEL和Seam PageFlow,同时允许用户定制自己的流程模型和语言。其流程虚拟机(PVM)技术为未来支持更多流程语言提供了基础。 ### 安装和配置jBPM4 安装jBPM4需要的基本软件包括...

Global site tag (gtag.js) - Google Analytics