#spring-webflow
#весенний веб-поток
Вопрос:
Я пытаюсь вернуться к своему основному потоку весной из любого из моих подпотоков, просто нажав кнопку.
когда я использую <end-state>
, он просто переходит к предыдущему потоку, который также является подпотоком в приложении.
Есть идеи?
Ответ №1:
Вам просто нужны соответствующие переходы в каждом подпотоке-состоянии в вызывающем потоке, чтобы делать то, что вы хотите. Идентификатор конечного состояния в вашем подпотоке — это то, что будет использоваться в качестве идентификатора события, на которое вы можете перейти в вашем вызывающем потоке.
Подпоток можно рассматривать как ветвь выполнения. Итак, когда ваш подпоток завершен, управление возвращается обратно вызывающему потоку. Представьте свое конечное состояние как оператор return (а атрибут 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>
Обратите внимание, что некоторое состояние здесь также может быть конечным состоянием. Ваша ситуация звучит так, как будто у вас есть основной поток, который вызывает подпоток, который, в свою очередь, вызывает другой подпоток. Итак, вы хотели бы, чтобы некоторое состояние было конечным состоянием, которое затем обрабатывалось бы его вызывающим потоком (в вашем случае «основным» потоком).
Ответ №2:
Вы можете достичь этого, добавив атрибут ‘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 вам нужно указать абсолютный путь к представлению
мой родительский ie 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">