2015-04-30 16 views
0

我想通過調用一個函數來實現到另一個視圖的轉換並設置流量範圍中的某個變量。成功或錯誤事件沒有任何區別。我知道,我可以在視圖狀態和操作狀態下使用評估標記來調用函數。將評估標籤放在每個標籤中是否有區別?對於這種情況哪一個更好?在視圖狀態或處於操作狀態下評估標記有什麼區別

+0

最好在動作狀態中使用評估標籤,然後轉換到另一個視圖狀態。視圖狀態旨在具有視圖特定細節,而操作狀態旨在評估表達式(方法)以進行後續轉換。 –

+0

那麼當我們使用評估視圖狀態? – user4002899

回答

1

WebFlow的靈活性在於,您可以通過「入門」和「退出」標籤或動作狀態標籤執行任何狀態下的表達式評估。與任何允許靈活性的框架一樣,最好選擇一種在所有流程中保持一致的策略。您可以簡單地在「視圖狀態」內的「on-entry」或「on-render」標籤中執行評估表達式,但使用中間的「操作狀態」先執行您的表達式,然後轉換到「視圖狀態」。

優勢:

有時你必須評估多個表達式,但它們是相同的「行動」的一部分。將這些多重評估分爲'行爲狀態'和'行爲狀態'提供一個有意義的ID名稱可以有助於流程的可讀性和潛在的故障排除,如果在該行爲狀態中引發異常。

因此,舉例來說,

可以說,我們要調用3種不同的服務方法,我們渲染「視圖狀態」之前。我們可以這樣做:

<view-state id="myViewState" view="myViewFile" model="entity"> 
    <on-entry> 
     <evaluate expression="myService.findObjById(id)" result="flowScope.model" /> 
     <evaluate expression="myService.updateUserStats(someField)"/> 
     <evaluate expression="myService.performSomeOtherAction()"/> 
    </on-entry> 

</view-state> 

,這會工作得很好,但它會更好,如果我們去掉所有的服務方法從「上進入」調用,並把他們安置在自己的「動作狀態」一旦完成執行再過渡到「視圖狀態」

<action-state id="prepareMyViewState"> 
     <evaluate expression="myService.findObjById(id)" result="flowScope.model" /> 
     <evaluate expression="myService.updateUserStats(someField)"/> 
     <evaluate expression="myService.performSomeOtherAction()"/> 
     <transition to="myViewState"/> 
</action> 

<view-state id="myViewState" view="myViewFile" model="entity"> 

</view-state> 

這兩個例子將是「正確的」,但是所述一個與所述動作狀態是更詳細和明確規定的關注點分離。因此,如果在動作狀態「prepareMyViewState」中引發異常,我們確切知道該名稱的這個動作狀態的作用與反映視圖狀態'myViewState'的拋出異常有關,該異常可能與準備或相關呈現視圖狀態。另外,如果您希望添加/編輯/刪除服務調用,將來可以通過有意義的名稱「prepareMyViewState」將它們置於自己的操作狀態中,從而輕鬆地將它發現到流文件中。

再一次,我會強調這裏沒有錯誤的答案,我只想說在整個Web流應用程序中選擇一個一致的「樣式」。中間動作狀態的第二種風格是我會使用的。

相關問題