JSF单页面应用程序gui流程

时间:2012-08-08 20:47:14

标签: jsf workflow cdi state activiti

我目前正在开发JSF 2中的单页应用程序(Primefaces,CDI EJB和JPA)。应用程序(页面)在幕后有一些复杂的工作流程。

例如,如果用户输入某种数据,则必须出现一个对话框,首先要求确认,然后根据答案执行某种工作流程。在工作流程内部,还可以弹出一些其他对话框,具体取决于插入的数据或某些数据库值。

我的问题:

是否有任何最佳实践来实现此类工作流引擎。 (只看了GoV模式状态机和activiti项目)

此致

3 个答案:

答案 0 :(得分:1)

您可以根据条件使用视图名称作为操作方法的返回值,以便JSF将这些视图与返回值的名称相匹配。

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

for java example:(Dynamic navgationa)

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并从中获取输出作为您的ViewIds,然后在您的操作方法中返回,这样JSF将呈现它们。

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

JSF 2.2将提供一个名为Faces Flows的流量范围机制

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