我目前正在JSF 2(Primefaces,CDI EJB和JPA)中開發單頁面應用程序。應用程序(頁面)在幕後有一些複雜的工作流程。JSF單頁面應用程序流程
例如,如果用戶輸入某種數據,則必須首先出現對話框,以便首先進行確認,然後根據答案執行某種工作流。在工作流程內部,還可以根據插入的數據或某些數據庫值彈出一些其他對話框。
我的問題:
是否有任何最佳實踐來實現這樣的工作流引擎。 (只是看着GOV模式狀態機和Activiti的項目)
問候
我目前正在JSF 2(Primefaces,CDI EJB和JPA)中開發單頁面應用程序。應用程序(頁面)在幕後有一些複雜的工作流程。JSF單頁面應用程序流程
例如,如果用戶輸入某種數據,則必須首先出現對話框,以便首先進行確認,然後根據答案執行某種工作流。在工作流程內部,還可以根據插入的數據或某些數據庫值彈出一些其他對話框。
我的問題:
是否有任何最佳實踐來實現這樣的工作流引擎。 (只是看着GOV模式狀態機和Activiti的項目)
問候
JSF 2.2將提供一個名爲面孔流動範圍機構流出
這符合我的需要 感謝您的幫助
您可以使用視圖名稱基於您的條件,使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返回到您的操作方法中。
我相信這個博客帖子是關係到你想要做什麼,它可能會有所幫助:
「頁面流量與流程 - 流程 - 一個UI中介者可以如何幫助」 http://www.bpm-guide.de/2012/04/04/pageflow-vs-process-flow-and-ui-mediator-pattern/