我有一个动作状态,它评估一个表达式,然后根据结果转换到各种其他状态.结果状态之一是将子流控制到另一个流的子流状态,例如;
<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>
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我可以通过输入标记将输入传递给子流,但我的问题是,当且仅当从转换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>
Run Code Online (Sandbox Code Playgroud)
Joh*_*int 15
有三种方法可以做到这一点.您可以通过对话,会话或传入的属性来完成此操作.
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>
Run Code Online (Sandbox Code Playgroud)
在你的子流的xml中
<?xml version="1.0" encoding="UTF-8"?>
<flow>
<input name="someNumber"/>
<input name="someNumber2"/>
...
</flow>
Run Code Online (Sandbox Code Playgroud)
在此示例中,someNumber和someNumber 2作为属性传递给子流.您可以将其评估为${someNumber}
编辑:
这是为了解决您的评论问题.如果您想在特定转换的会话范围中设置变量,您可以执行以下操作:
<transition on="WORKFAIL" to="fixFail" >
<set name="conversationScope.someVariable" value="Hello World"/>
</transition>
Run Code Online (Sandbox Code Playgroud)
然后在你的jsp中
${someVariable} <!-- This will print out 'Hello World' -->
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
29692 次 |
| 最近记录: |