【发布时间】:2011-08-13 22:09:21
【问题描述】:
我正试图在春季从我的任何子流程中返回我的主要流程,只需单击一个按钮。
当我使用<end-state> 时,它只是转到上一个流程,这也是应用程序中的一个子流程。
有什么想法吗?
【问题讨论】:
标签: spring-webflow
我正试图在春季从我的任何子流程中返回我的主要流程,只需单击一个按钮。
当我使用<end-state> 时,它只是转到上一个流程,这也是应用程序中的一个子流程。
有什么想法吗?
【问题讨论】:
标签: spring-webflow
您只需要在调用流程中的每个子流程状态中进行适当的转换即可执行您想要的操作。子流中的结束状态 ID 将用作您可以在调用流中转换的事件 ID。
子流可以被认为是执行的一个分支。因此,当您的子流程完成时,控制权将返回给调用流程。将您的最终状态视为返回语句(并将 id 属性视为返回的值——您也可以设置输出属性,但这在这里并不重要)。
当您的子流程终止时,控制权将返回给调用流程。调用流程应该定义一个转换来决定如何处理这个事件。您将看到的事件 id 是子流中结束状态的 id。
如果您有以下结束状态,那么在您的子流程中:
<end-state id="back"/>
然后您可以在调用子流的流中处理此转换:
<subflow-state id="do-some-sub" flow="some-sub">
< ... input variables, expressions, etc ... />
<transition on="back" to="some-state"/>
</subflow-state>
请注意,这里的 some-state 也可以是结束状态。您的情况听起来像您有一个调用子流的主要流程,该子流程又调用另一个子流程。因此,您希望 some-state 成为最终状态,然后由其调用流程(在您的情况下为“主”流程)处理。
【讨论】:
您可以通过在像这样定义子流程时添加“父”属性来实现这一点
<flow parent="login" xmlns="http://www.springframework.org/schema/webflow"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/webflow http://www.springframework.org/schema/webflow/spring-webflow-2.0.xsd">
<view-state id="forgotPassword">
<transition on="backtoLogin" to="login">
</transition>
在这里,我希望我的子流程通过“单击”后退按钮返回登录页面。
需要注意的一点是,在您的父 flow.xml 中,您需要指定视图的绝对路径
下面给出了我的父母,即 login-flow.xml
<flow xmlns="http://www.springframework.org/schema/webflow"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/webflow http://www.springframework.org/schema/webflow/spring-webflow-2.0.xsd">
<view-state id="login" view="../login/defaultLogin.xhtml">
【讨论】: