Spring Webflow - 决策状态与动作状态

时间:2012-08-16 20:18:24

标签: java spring spring-webflow

我正在使用Spring WebFlow 2,我想知道决策状态与动作状态的区别。

我正在阅读并且不理解决策状态与动作状态的区别。我理解视图状态会显示一个输入的jsp,但是决策状态与动作状态的区别是什么?

我为什么要在行动状态下使用决策状态? 为什么我应该在决策状态下使用动作状态?

有人可以点亮这个

4 个答案:

答案 0 :(得分:29)

通常,decision-state专门用于布尔条件。关于它发生的事情,它更加清晰简洁。

例如,

<decision-state id="myDecisionState">
    <if test="myBooleanFunction()" then="resultIsTrueState" else="resultIsFalseState" />
</decision-state>

这可以使用像action-state那样复制:

<action-state id="myActionState">
    <evaluate expression="myBooleanFunction()" />
    <transition on="yes" to="resultIsTrueState" />
    <transition on="no" to="resultIsFalseState" />
</action-state>

然而,区别在于action-state不仅仅对布尔值进行操作 - 它可以触发String (string value)Boolean (yes/no)Enum (enum name)上的转换,其他任何结果都被视为{ {1}}。

因此,与实际必须决定某事success相反,decision-state可以简单地用于执行某些代码。

action-state

我希望能够解决问题。

答案 1 :(得分:3)

<强> 1。令人困惑的案例

在Webflow中,有时&lt; decision-state&gt; 的使用方式与&lt; action-state&gt; 类似。 documentation表明以下两个表达式是可互换的。

  

&lt; action-state id =“moreAnswersNeeded”&gt;
   &lt; evaluate expression =“interview.moreAnswersNeeded()”/&gt;
   &lt; transition on =“yes”to =“answerQuestions”/&gt;
   &lt; transition on =“no”to =“finish”/&gt;
  &LT; /动作状态&GT;

  

&lt; decision-state id =“moreAnswersNeeded”&gt;
   &lt; if test =“interview.moreAnswersNeeded()”then =“answerQuestions”else =“finish”/&gt;

  &LT; /决策状态&GT;

<强> 2。何时使用?

鉴于&lt; decision-state&gt; 只能处理&lt; action-state&gt; 处理的子集 - 我们应该在考虑两个候选者时从前者开始。

  1. &lt; decision-state&gt; 旨在用于if-else路由,作为&lt; action-state&gt;的替代方案。它可以作为关于计票的二元决策。如果可以应用 - 应该使用它。
  2. &lt; action-state&gt; 允许处理更复杂的逻辑。你可以处理异常,你可以执行表达而不使它们成为条件,你可以处理比前一个更多的情况。
  3. 希望这有帮助。

答案 2 :(得分:1)

他们非常相似。您可以将任何决策状态写为操作状态。决策状态只为条件转换提供了方便,简洁的语法(使用if元素)。如果我只需要根据结果评估一个表达式和转换,我使用决策状态。否则(例如,如果我有多个表达式要评估),我使用一个动作状态。

HTH

答案 3 :(得分:1)

你可以使用lambda条件

示例:x = y? &#34;真实结果&#34; :&#34;错误结果&#34;

&#13;
&#13;
	<view-state id="viewname">
		<on-entry>
			<evaluate expression="flowScope.varx == x ? Bean.somethingX : Bean.somethingY " result="flowScope.varResult" />
		</on-entry>
	</view-state>
&#13;
&#13;
&#13;

记住条件