【问题标题】:Spring Webflow - decision-state vs action-stateSpring Webflow - 决策状态与动作状态
【发布时间】:2012-08-13 06:08:48
【问题描述】:

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

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

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

有人能解释一下吗

【问题讨论】:

    标签: java spring spring-webflow


    【解决方案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>

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

          希望这会有所帮助。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-11-08
            • 1970-01-01
            • 2019-03-14
            • 2021-03-19
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多