【问题标题】:Spring WebFlow - business logic in view-state or action-stateSpring WebFlow - 视图状态或动作状态中的业务逻辑
【发布时间】:2012-09-24 13:39:47
【问题描述】:

调用业务逻辑的最佳位置是什么?我有以下要求。

1)。从用户那里获取搜索条件

2)。如果当前用户正在尝试搜索未经授权的结果,则抛出业务异常

3)。检索结果

4)。如果结果数==0,请再次进入搜索页面并留言。

5)。如果结果数量>限制,请再次进入搜索页面并留言。

6)。转到显示结果页面。

这就是我目前所拥有的......

<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>

我的问题是,我应该在 action-stae 还是 view-state="showSearchResults" 中调用 getSearchResults() 方法?如果我在 action-stae 中调用该方法,我必须将搜索结果放在 flowscope 中,以便第二个视图可以获得结果 - 我担心这种情况下的内存。如果我在第二个 view-on-entry 中调用该方法,我可以将 personList 放入 viewscope 但如何处理案例 2,4 和 5?

提前致谢!

【问题讨论】:

    标签: spring-webflow


    【解决方案1】:

    您已经回答了自己的部分问题:

    • 使用操作状态来调用业务逻辑可以让您更好地控制对不同结果的反应方式:出现异常时转到此处,如果一切正常则转到其他位置,等等。缺点是您需要将数据放在更长寿命的范围(流范围)中以使其可用于视图状态。
    • 使用视图状态允许您通过使用呈现操作或输入操作检索数据来使用短暂的范围(视图范围或请求范围),但在处理方面没有给您太多控制权行动结果。

    在两者之间进行选择有点折衷。如果搜索结果可能变得非常大,那么使用短寿命范围尽可能减少内存负载可能是一个重要的问题,因此您将使用视图状态。在其他情况下,动作状态可能更合适。

    另一种方法是引入一个应用程序控制器(从流程中调用),它调用业务逻辑并返回一个包含多个内容的对象:

    • 搜索结果
    • 可能显示的信息/警告消息

    然后您可以使用视图状态,视图将能够简单地从结果对象中获取搜索结果和信息/警告消息并显示它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-13
      • 1970-01-01
      • 2016-11-08
      • 2010-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-14
      相关资源
      最近更新 更多