调用业务逻辑的最佳位置是什么?我有以下要求。
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>
我的问题是,我应该在action-stae或view-state =“showSearchResults”中调用getSearchResults()方法吗?如果我在action-stae中调用该方法,我必须将搜索结果放在flowcope中,以便第二个视图可以得到结果 - 我担心这个场景中的内存。如果我在第二个视图中调用该方法,我可以将personList放在viewscope中但是如何处理2,4和5的情况?
提前致谢!
答案 0 :(得分:0)
您已经回答了部分问题:
在两者之间进行选择是一种交易。如果搜索结果可能变得非常大,那么使用短寿命范围来尽可能地减少内存负载可能是一个重要问题,因此您将使用视图状态。在其他情况下,行动状态可能更合适。
另一种方法是引入一个应用程序控制器(从流程中调用),该控制器调用业务逻辑并返回包含多个内容的对象:
然后您可以使用视图状态,视图将只能从结果对象中选取搜索结果和信息/警告消息并显示它。