我正在使用 Spring WebFlow 2,我想知道决策状态与动作状态的区别。
我正在阅读并且不了解决策状态与动作状态的差异。我知道视图状态将显示一个用于输入的 jsp,但决策状态与动作状态的区别是什么?
为什么我应该使用决策状态而不是动作状态?为什么我应该使用动作状态而不是决策状态?
有人可以对此有所了解吗
我正在使用 Spring WebFlow 2,我想知道决策状态与动作状态的区别。
我正在阅读并且不了解决策状态与动作状态的差异。我知道视图状态将显示一个用于输入的 jsp,但决策状态与动作状态的区别是什么?
为什么我应该使用决策状态而不是动作状态?为什么我应该使用动作状态而不是决策状态?
有人可以对此有所了解吗
通常,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>
我希望这能解决问题。
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>处理的子集 - 在考虑两个候选人时,我们应该从前者开始。
希望这可以帮助。
它们非常相似。您可以将任何决策状态写为动作状态。决策状态只是为条件转换(使用if
元素)提供了一种方便、简洁的语法。如果我只需要根据结果评估一个表达式和转换,我使用决策状态。否则(例如,如果我有多个表达式要评估),我使用动作状态。
高温高压
你可以使用 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>
记住条件