Spring Webflow, возврат к основному потоку из любого подпотока - PullRequest
5 голосов
/ 27 апреля 2011

Я пытаюсь вернуться к своему основному потоку весной, из любого из моих подпотоков, просто нажав кнопку.

когда я использую <end-state>, он просто переходит к предыдущему потоку, который также является подпотоком в приложении.

Есть идеи?

Ответы [ 2 ]

13 голосов
/ 04 мая 2011

Вам просто нужны соответствующие переходы в каждом подпотоке-состоянии в потоке вызовов, чтобы делать то, что вы хотите.Идентификатор конечного состояния в вашем подпотоке - это то, что будет использоваться в качестве идентификатора события, на который вы можете перейти в потоке вызовов.

Подпоток можно рассматривать как ветвь выполнения.Поэтому, когда ваш подпоток завершен, управление возвращается обратно в поток вызова.Думайте о своем конечном состоянии как о выражении возврата (и об атрибуте 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 был конечным состоянием, которое затем обрабатывалось бы его вызывающим потоком (в вашем случае «основным» потоком).

0 голосов
/ 30 мая 2011

Этого можно добиться, добавив атрибут 'parent', когда вы определяете свой подпоток следующим образом:

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