【问题标题】:Is it possible to use if tag in <on-entry> state in spring webflow是否可以在 spring webflow 中的 <on-entry> 状态下使用 if 标记
【发布时间】:2017-05-03 19:58:58
【问题描述】:

我在 spring web-flow 2 中编写了如下流程。但是我收到错误 invalid content

<on-entry>
<decision-state="check">
<if test="some condition" then="x state" else="y state"/>
</decision-state>
</on-entry>

<view-state id="x state">
<evaluate expression="...."/>
</view-state>

在进入状态下是否可以使用 if 标记? 我们可以在进入时使用决策状态吗?

如果条件为真,我必须在&lt;on-entry&gt; 状态下评估方法。否则,它不应该在&lt;on-entry&gt; 状态下进行评估。

【问题讨论】:

    标签: java spring spring-webflow-2


    【解决方案1】:

    首先,&lt;on-entry&gt; 仅在状态内部才有意义。
    其次,您不能在 &lt;on-entry&gt; 中定义状态

    您应该做的只是定义您的decision-state,webflow 会自动将其用作入口点。

    <decision-state id="check">
        <if test="some condition" then="xState" else="yState"/>
    </decision-state>
    
    <view-state id="xState">
        <evaluate expression="...."/>
    </view-state>
    
    <view-state id="yState">
        <evaluate expression="...."/>
    </view-state>
    

    让我们看看这个流程,入口点显然是check,这是你的决策状态,因为x statey state 都被它调用了。

    所以你的流程图是

    x 状态
              /
    查看
              \
    y 状态

    因为没有别的办法。我想这是你想要的行为

    [编辑] 这是一个具有 2 个动作状态的示例:

    <decision-state id="check">
        <if test="some condition" then="xState" else="yState"/>
    </decision-state>
    
    <action-state id="xState">
        <evaluate expression="expr1"/>
        <transition on="success" to="zState"/>
    </action-state>
    
    <action-state id="ySate">
        <evaluate expression="expr2"/>
        <transition on="success" to="zState"/>
    </action-state>
    
    <view-state id="zState">
    </view-state>
    


    x 动作状态
              / (评估 expr1) \
    检查                         视图状态
              \                         /
    y 动作状态
                (评估 expr2)    

    【讨论】:

    • 您删除了流程中的 on-entry 但我需要它,因为在 on-entry 状态中已经存在评估表达式。此 on-entry 状态包含在视图状态中。这里是评估表达式应该基于 if 条件来执行。
    • 我不确定我是否理解您的意思。也许您应该使用决策状态然后 2 个动作状态来评估您的表达式,然后将两个动作状态重定向到您的视图状态
    • 非常感谢您的澄清。我以其他方式解决了这个问题。
    【解决方案2】:

    是的 使用 lambda if 条件 x = y ? “真结果”:“假结果”

        <view-state id="viewId">
            <on-entry>
                <evaluate expression="flowScope.varx == x ? Bean.dosomethingX() : Bean.somethingY()" result="flowScope.varResult" />
            </on-entry>
        </view-state>
    

    或在开始时

            <on-start>
                <evaluate expression="flowScope.varx == x ? Bean.somethingX(): Bean.somethingY() " result="flowScope.varResult" />
            </on-start>
    

    【讨论】:

      猜你喜欢
      • 2014-11-25
      • 1970-01-01
      • 2012-06-21
      • 2011-05-19
      • 1970-01-01
      • 1970-01-01
      • 2012-07-28
      • 1970-01-01
      • 2016-07-26
      相关资源
      最近更新 更多