2015-04-30 17 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流应用程序中选择一个一致的“样式”。中间动作状态的第二种风格是我会使用的。

相关问题