Spring Webflow - 决策状态与动作状态
Posted
技术标签:
【中文标题】Spring Webflow - 决策状态与动作状态【英文标题】:Spring Webflow - decision-state vs action-state 【发布时间】:2012-08-13 06:08:48 【问题描述】:我正在使用 Spring WebFlow 2,我想知道决策状态与动作状态的区别。
我正在阅读,但不了解决策状态与动作状态的区别。我知道视图状态会显示一个 jsp 供输入,但决策状态与动作状态的区别是什么?
为什么我应该使用决策状态而不是动作状态? 为什么我应该使用动作状态而不是决策状态?
有人能解释一下吗
【问题讨论】:
【参考方案1】:通常,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>
我希望这能解决问题。
【讨论】:
【参考方案2】:它们非常相似。您可以将任何决策状态写为动作状态。决策状态只是为条件转换提供了一种方便、简洁的语法(使用if
元素)。如果我只需要根据结果评估一个表达式和转换,我使用决策状态。否则(例如,如果我有多个表达式要评估),我使用动作状态。
HTH
【讨论】:
【参考方案3】:你可以使用 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>
记住条件
【讨论】:
【参考方案4】:1.令人困惑的案例
在 Webflow 中,
和:
2。什么时候用什么?
鉴于
希望这会有所帮助。
【讨论】:
以上是关于Spring Webflow - 决策状态与动作状态的主要内容,如果未能解决你的问题,请参考以下文章
RL系列马尔可夫决策过程——状态价值评价与动作价值评价的统一
如何在 Spring Webflow 2 中使用 Flow Managed Persistence Context 以编程方式触发提交