2012-07-25 32 views
1

什麼是調用業務邏輯的最佳位置?我有以下要求。Spring WebFlow - 視圖狀態或動作狀態下的業務邏輯

1)。從用戶獲取搜索標準

2)。如果當前用戶正在嘗試搜索未經授權的結果,則會拋出業務異常

3)。檢索結果

4)。如果結果數量爲0,則再次進入搜索頁面並輸入消息。 5)。如果結果數量>限制,請再次進入搜索頁面並輸入消息。 6)。轉到showresults頁面。

這是我迄今爲止...

<flow....> 
     <on-start> 
      <evaluate expression="appConfig.setUpSupportData()" result="flowScope.supportData"/> 
     </on-start> 
     <view-state id="searchHome" view="searchHome" model="searchCriteria"> 
      <transition on="search" to="doSearch"/> 
     </view-state> 

     <action-state id="doSearch"> 
      <evaluate expression="searchUtil.getSearchResults(flowScope.searchCriteria)" result="flowScope.personList"/> 
      <evaluate expression="searchUtil.showSearchResults(flowScope.personList, flowRequestContext)" > 
        <attribute name="name" value="expression2"/> 
      </evaluate> 
      <transition on="expression2.yes" to="showSearchResults"/> 
      <transition on="expression2.no" to="searchHome"/> 
    </action-state> 
    <view-state id="showSearchResults"></view-state> 
</flow> 

我的問題是,我應該調用getSearchResults在行動stae或視圖狀態=「showSearchResults」()方法?如果我在action-sta中調用該方法,則必須將搜索結果放入流量顯示器中,以便第二個視圖可以得到結果 - 在此場景中,我很擔心內存。如果我在第二個view-on-entry中調用方法,我可以將personList放入視圖範圍中,但是如何處理2,4和5情況?

在此先感謝!已經你自己的問題的

回答

0

你已經回答了一部分:

  • 使用的動作狀態來調用業務邏輯,給你提供瞭如何應對不同的結果更多的控制:去這裏上的異常,如果一切順利,去其他地方,等等。缺點是你需要將數據放在一個更長的範圍內(流程範圍)以使其可用於視圖狀態。
  • 使用視圖狀態允許您通過使用render-action或entry-action檢索數據來使用短期範圍(視圖範圍或請求範圍),但在處理時不會給予太多控制行動成果。

在這兩者之間進行選擇是有點交易的。如果搜索結果可能變得非常大,那麼使用短期範圍儘可能減少內存負載可能是一個重要的問題,因此您可以使用視圖狀態。在其他情況下,動作狀態可能更合適。

一種替代的方法是引入一個應用控制器(從流調用)調用業務邏輯,並返回一個包含幾件事情的對象:

  • 搜索結果
  • 一個潛在的信息/警告要顯示的消息

然後,您可以使用視圖狀態,視圖將能夠從結果對象中簡單地拾取搜索結果和信息/警告消息並顯示它。