我有一个动作状态,它评估表达式,然后根据结果转换到其他各种状态。其中一个结果状态是一个子流状态,它将控制权交给另一个流,例如;
<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>
答案 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' -->