代码之家  ›  专栏  ›  技术社区  ›  urbiwanus

JSF单页应用程序gui流

  •  2
  • urbiwanus  · 技术社区  · 12 年前

    我目前正在JSF2中开发一个单页应用程序(Primefaces、CDIEJB和JPA)。应用程序(页面)在后台有一些复杂的工作流。

    例如,如果用户输入某种数据,则必须出现一个对话框,首先确认,然后根据答案执行某种工作流。在工作流中,根据插入的数据或某些数据库值,也可以弹出一些其他对话框。

    我的问题是:

    有没有实现这样一个工作流引擎的最佳实践。(只看了GoV模式状态机和activiti项目)

    当做

    3 回复  |  直到 9 年前
        1
  •  1
  •   Mehdi    12 年前

    您可以根据自己的条件使用视图名称作为操作方法的返回值,这样JSF将呈现与返回值名称匹配的视图。

    可以使用java代码或在faces-config.xml中声明流来处理工作流

    例如:(动态导航)

    public String yourActionMethod(){
       if(condition1){
           return "view1";
       }else if(condition2){
           return "view2";
       }else if(conditionN){
           return "viewN";
       }
    }
    

    对于XML示例:(静态导航)

    <navigation-rule>
       <from-view-id>/index.xhtml</from-view-id>
       <navigation-case>
          <from-outcome>success</from-outcome>
          <to-view-id>/welcome.xhtml</to-view-id>
       </navigation-case>
       <navigation-case>
          <from-outcome>failure</from-outcome>
          <to-view-id>/failed.xhtml</to-view-id>
       </navigation-case> 
    </navigation-rule>
    

    对于您的用例,动态导航(使用java代码)是很好的。

    如果你想显示基于服务器端条件的对话框,你可以使用这样的东西:

    public void doSomething(ActionEvent actionEvent) {
        RequestContext context = RequestContext.getCurrentInstance();
        context.execute("dialogVar.show()");
    }
    

    如果您的用例更复杂,并且您有一个复杂的工作流,请尝试使用Activiti并从中获取输出作为ViewId,然后在您的操作方法中返回,这样JSF就会呈现它们。

    您还可以编写自己的状态机,获取它的输出,并在操作方法中将其作为ViewId返回。

        2
  •  0
  •   Rafael Cordones    12 年前

    我相信这篇博客文章与你想做的事情有关,它可能会有所帮助:

    “页面流与流程流UI中介的帮助” http://www.bpm-guide.de/2012/04/04/pageflow-vs-process-flow-and-ui-mediator-pattern/

        3
  •  0
  •   urbiwanus    12 年前

    JSF2.2将提供一种称为FacesFlows的流作用域机制

    符合我的需求 谢谢你的帮助