17

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

我正在阅读并且不了解决策状态与动作状态的差异。我知道视图状态将显示一个用于输入的 jsp,但决策状态与动作状态的区别是什么?

为什么我应该使用决策状态而不是动作状态?为什么我应该使用动作状态而不是决策状态?

有人可以对此有所了解吗

4

4 回答 4

32

通常,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)任何其他结果都被视为 a 。Boolean (yes/no)Enum (enum name)success

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

<action-state id="myActionState">
    <evaluate expression="myFunction()" />
    <transition on="success" to="myNextState" />
</action-state>

我希望这能解决问题。

于 2012-08-16T20:43:13.177 回答
3

1. 令人困惑的案例

在 Webflow 中,在某些情况下<decision-state>可以以与<action-state>类似的方式使用。文档显示以下两个表达式是可以互换的。

<action-state id="moreAnswersNeeded">
  <evaluate expression="interview.moreAnswersNeeded()" />
  <transition on="yes" to="answerQuestions" />
  <transition on="no" to="finish" / >
</动作状态>

和:

<decision-state id="moreAnswersNeeded">
  <if test="interview.moreAnswersNeeded()" then="answerQuestions" else="finish" />
</decision-state>

2.什么时候用什么?

鉴于<decision-state>只能处理<action-state>处理的子集 - 在考虑两个候选人时,我们应该从前者开始。

  1. < decision-state>用于 if-else 路由,作为 <action-state> 的替代方案。它作为对 rounting 的二元决策。如果它可以应用 - 它应该被使用。
  2. < action-state>允许处理更复杂的逻辑。您可以处理异常,您可以执行表达式而不使它们成为条件,并且您可以处理比前者更多的情况。

希望这可以帮助。

于 2017-01-05T14:47:05.917 回答
1

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

高温高压

于 2012-08-16T22:11:35.293 回答
1

你可以使用 lambda 条件

例如:x = y ? “真结果”:“假结果”

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

记住条件

于 2016-03-04T16:34:31.067 回答