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 中, 可以以与 类似的方式使用。 documentation 表示以下两个表达式可以互换。

和:

2。什么时候用什么?

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

    旨在用于 if-else 路由,作为 的替代方案。它作为一个关于路由的二元决策。如果可以应用 - 应该使用。 允许处理更复杂的逻辑。您可以处理异常,您可以执行表达式而不使它们成为条件,并且您可以处理比前者更多的情况。

希望这会有所帮助。

【讨论】:

以上是关于Spring Webflow - 决策状态与动作状态的主要内容,如果未能解决你的问题,请参考以下文章

CAS 6.2.2 中的 WebFlow

RL系列马尔可夫决策过程——状态价值评价与动作价值评价的统一

如何在 Spring Webflow 2 中使用 Flow Managed Persistence Context 以编程方式触发提交

有限马尔可夫决策过程

Ajax + Spring Webflow

路网路径规划中q_learning动作集如何设计