我正在使用Spring WebFlow 2,我想知道决策状态与动作状态的区别。
我正在阅读并且不理解决策状态与动作状态的区别。我理解视图状态会显示一个输入的jsp,但是决策状态与动作状态的区别是什么?
我为什么要在行动状态下使用决策状态? 为什么我应该在决策状态下使用动作状态?
有人可以点亮这个
答案 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; 处理的子集 - 我们应该在考虑两个候选者时从前者开始。
希望这有帮助。
答案 2 :(得分:1)
他们非常相似。您可以将任何决策状态写为操作状态。决策状态只为条件转换提供了方便,简洁的语法(使用if
元素)。如果我只需要根据结果评估一个表达式和转换,我使用决策状态。否则(例如,如果我有多个表达式要评估),我使用一个动作状态。
HTH
答案 3 :(得分:1)
你可以使用lambda条件
示例:x = y? &#34;真实结果&#34; :&#34;错误结果&#34;
<view-state id="viewname">
<on-entry>
<evaluate expression="flowScope.varx == x ? Bean.somethingX : Bean.somethingY " result="flowScope.varResult" />
</on-entry>
</view-state>
&#13;
记住条件