2012-08-08 69 views
1

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

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

我的问题:

是否有任何最佳实践来实现这样的工作流引擎。 (只是看着GOV模式状态机和Activiti的项目)

问候

回答

0

JSF 2.2将提供一个名为面孔流动范围机构流出

这符合我的需要 感谢您的帮助

1

您可以使用视图名称基于您的条件,使JSF将呈现匹配的名称这些观点的动作方法的返回值的返回值。 (动态navgationa)

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

为XML示例::

处理工作流程可以使用Java代码或声明你在流动面-config.xml中

为Java示例来完成(静态导航)

<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返回到您的操作方法中。