【发布时间】:2012-08-13 06:08:48
【问题描述】:
我正在使用 Spring WebFlow 2,我想知道决策状态与动作状态的区别。
我正在阅读,但不了解决策状态与动作状态的区别。我知道视图状态会显示一个 jsp 供输入,但决策状态与动作状态的区别是什么?
为什么我应该使用决策状态而不是动作状态? 为什么我应该使用动作状态而不是决策状态?
有人能解释一下吗
【问题讨论】:
标签: java spring spring-webflow
我正在使用 Spring WebFlow 2,我想知道决策状态与动作状态的区别。
我正在阅读,但不了解决策状态与动作状态的区别。我知道视图状态会显示一个 jsp 供输入,但决策状态与动作状态的区别是什么?
为什么我应该使用决策状态而不是动作状态? 为什么我应该使用动作状态而不是决策状态?
有人能解释一下吗
【问题讨论】:
标签: java spring spring-webflow
通常,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) 上触发转换,任何其他结果都被视为 success。
因此,与实际上必须决定某事的decision-state 相比,action-state 可以简单地用于执行某些代码。
<action-state id="myActionState">
<evaluate expression="myFunction()" />
<transition on="success" to="myNextState" />
</action-state>
我希望这能解决问题。
【讨论】:
它们非常相似。您可以将任何决策状态写为动作状态。决策状态只是为条件转换提供了一种方便、简洁的语法(使用if 元素)。如果我只需要根据结果评估一个表达式和转换,我使用决策状态。否则(例如,如果我有多个表达式要评估),我使用动作状态。
HTH
【讨论】:
你可以使用 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>
记住条件
【讨论】:
1.令人困惑的案例
在 Webflow 中,
和:
2。什么时候用什么?
鉴于
希望这会有所帮助。
【讨论】: