Spring Webflow,从任何子流返回主流

时间:2011-04-27 14:24:14

标签: spring-webflow

我正试图在弹簧中返回我的主要流程,只需单击一个按钮即可从我的任何子流程返回。

当我使用<end-state>时,它只是转到上一个流程,这也是应用程序中的子流程。

有什么想法吗?

2 个答案:

答案 0 :(得分:13)

您只需要在调用流程中的每个子流状态中进行适当的转换即可执行您想要的操作。子流中的结束状态ID将用作您可以在呼叫流中转换的事件ID。

子流可以被认为是执行的一个分支。因此,当您的子流程完成后,控制权将返回到调用流程。将您的最终状态视为return语句(并将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 成为一个结束状态,然后由它的调用流程处理(在你的情况下是“主”流程)。

答案 1 :(得分:0)

您可以通过在定义子流时添加“父”属性来实现此目的,如此

<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">