Spring Webflow:如何在转换期间将属性从一个流传递到另一个流?

时间:2011-01-05 12:21:30

标签: spring-webflow

我有一个动作状态,它评估表达式,然后根据结果转换到其他各种状态。其中一个结果状态是一个子流状态,它将控制权交给另一个流,例如;

<action-state id="doWork">
    <evaluate expression="someAction.doWork(someInput)" />
 <transition on="WORKSUCCESS" to="workSuccess" />
 <transition on="WORKFAIL" to="fixFail" />
</action-state>

<subflow-state id="fixFail" subflow="someOtherPlace/someOtherWorkToFixFail">
    <input name="someNumber" value="1" type="java.lang.Integer" />
    <transition on="finish" to="workSuccess" />
</subflow-state>

正如您所看到的,我可以通过输入标记将输入传递到子流中,但我的问题是,当且仅当从转换WORKFAIL调用子流状态时,如何指定和传递我想要的其他输入? ?假设可以从其他动作状态调用子流状态“fixFail”。

我尝试过与以下类似的东西,没有效果;

<action-state id="doWork">
    <evaluate expression="someAction.doWork(someInput)" />
 <transition on="WORKSUCCESS" to="workSuccess" />
 <transition on="WORKFAIL" to="fixFail">
            <attribute name="newInput" value="3000" type="java.lang.Integer" />
    </transition>
</action-state>

<subflow-state id="fixFail" subflow="someOtherPlace/someOtherWorkToFixFail">
    <input name="someNumber" value="1" type="java.lang.Integer" />
    <input name="someNumber2" value="flowScope.newInput" type="java.lang.Integer" />
    <transition on="finish" to="workSuccess" />
</subflow-state>

1 个答案:

答案 0 :(得分:14)

有三种方法可以做到这一点。您可以通过对话,会话或传入的属性来完成此任务。

  • ConversationScope:如果某个字段位于conversationScope,则该字段在该特定流程中的任何位置都可见,以及该流的子流(及其转换)

  • SessionScope :(可能不是你的 想要)所有流量和都可见 他们的子流程

最后,您可以将字段作为属性传递到子流状态,例如

<subflow-state id="fixFail" subflow="someOtherPlace/someOtherWorkToFixFail">
    <input name="someNumber" value="1" type="java.lang.Integer" />
    <input name="someNumber2" value="flowScope.newInput" type="java.lang.Integer" />
    <transition on="finish" to="workSuccess" />
</subflow-state>

在子流程的xml中

<?xml version="1.0" encoding="UTF-8"?>
<flow>
    <input name="someNumber"/>
    <input name="someNumber2"/>
    ...
</flow>

在此示例中,someNumber和someNumber 2作为属性传递给子流。您可以将其评估为${someNumber}

编辑:

这是为了解决您的评论问题。如果您想在特定转换的会话范围中设置变量,您可以执行以下操作:

<transition on="WORKFAIL" to="fixFail" >
  <set name="conversationScope.someVariable" value="Hello World"/>
</transition>

然后在你的jsp中

${someVariable}  <!-- This will print out 'Hello World' -->