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