2013-04-20 2 views
0

Можно ли определить фактический рабочий поток в контексте весеннего mvc и завершить его?Завершить фактическое выполнение потока пружинных лент

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

Я надеюсь, что это понятно, что я хочу, и я признателен за любую помощь, чтобы получить через этот вопрос :)

Спасибо.

ответ

1

Если я правильно понял вашу проблему - вы хотели закончить текущий поток, но все еще имеете щелчок по меню - это правильно?

Если это так, у вас есть общий общий поток, который наследуется всеми вашими субпотоками. Затем добавьте это в тег flow каждого из ваших потоков, где commonFlow - это имя или идентификатор вашего файла определения глобального потока.

parent="commonFlow" 

В этом глобальном определении потока, определяет переход к опции меню:

<global-transitions> 
<!-- If Menus are triggered on flows, we end them first. --> 
<transition on="menuClick" to="endCurrentFlowThenMenu"/> 
</global-transitions> 

А затем определить редирект для меню:

<end-state id="endCurrentFlowThenMenu" view="flowRedirect:menuView"></end-state> 

Однако, это работает только когда текущий поток - поток родительского/верхнего уровня. Если это Подпоток, он получает немного грязный - вам нужна работа вокруг так, что все Подпотоки оканчиваются первым:

<global-transitions> 
<!-- If Menus are triggered on flows and subflows, we end them first. --> 
<transition on="menuClick" to="endCurrentFlowThenMenuLevel1"/> 
    <transition on="endCurrentFlowThenMenuLevel1" to="endCurrentFlowThenMenuLevel2"/> 
</global-transitions> 

В этом случае вы определить соответствие конечных состояний:

<end-state id="endCurrentFlowThenMenuLevel1" view="flowRedirect:newFlow"> 
</end-state> 
<end-state id="endCurrentFlowThenMenuLevel2" view="flowRedirect:newFlow"> 
</end-state> 

Причина, по которой я повторяю атрибут view в каждом конечном состоянии, так что он все еще может работать, даже если текущий поток является потоком верхнего уровня. В зависимости от максимального глубинного подпотока вам необходимо иметь несколько переходов и конечных состояний, чтобы они соответствовали (т. Е. Если у вас самая глубокая функциональность может иметь 2 подпотока, повторите выше 3 раза).

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

Если, однако, текущий поток является субпотоком, SWF не будет выполнять перенаправление в подпотоке, но вместо этого сначала начнет пузыриться до родителя, ища подходящий переход для текущего подпотока, который только что закончился. Он будет продолжать делать это до тех пор, пока не найдет поток верхнего уровня, и в этом случае он выполнит перенаправление, эффективно прекратив все субпотоки в этом процессе.

0

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

В принципе, вы должны определить абстрактный поток, Викисклада заголовки, установка аннотация = истина внутри тега потока, а затем определить глобальные-переходы которые будут доля среди потока/подпотока эти глобальные-переходы может перенаправить на какое-то событие, в этом примере на конечное состояние.

Вызов потока определяет, основного поток, определяют Подпоток состояния тега, здесь вы должны написать возвращенный переход от вызываемого потока, Подпотока, которые должны быть таким же, идентификатором совместно перехода и тег конечного состояния субпотока, это способ завершить подпоток и вернуться к основному потоку. Если вы хотите использовать некоторые глобальные переходы, то вы должны определить эти переходы внутри subflow-state тег, устанавливающий одинаковое значение для атрибут основного потока на и атрибут global-flow to (в этом примере будет loginEnd и signEnd). Последний шаг: атрибут main flow to должен совпадать с атрибутом global flow state (в этом примере loginEnd и signEnd снова).

Commons-заголовки

<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" 
abstract="true"> 

<end-state id="loginEnd" view="flowRedirect:login" /> 

<end-state id="signupEnd" view="flowRedirect:signup" /> 

<global-transitions> 
    <transition on="login" to="loginEnd" /> 
    <transition on="signup" to="signupEnd"/> 
</global-transitions> 

Основной поток

<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" 
    parent="commons-header"> 


<view-state id="inicio" view="main.xhtml"> 
    <transition on="manageSpace" to="adminSpaces" /> 

    <transition on="goSpace" to="visitSpace" /> 
</view-state> 

<subflow-state id="visitSpace" subflow="space"> 
    <on-entry> 
     <evaluate expression="space.showSpace(requestParameters.idSpace,flowRequestContext)" result="conversationScope.visitedSpace" /> 
    </on-entry> 

    <transition on="finishSubFlow" to="inicio" /> 

    <transition on="loginEnd" to="loginEnd" /> 
    <transition on="registerEnd" to="registerEnd" /> 
</subflow-state> 

<end-state id="error" view="flowRedirect:error" /> 

Подпоток

<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" 
parent="commons-header"> 


<view-state id="showPicture" view="space_pictures.xhtml"> 

    <on-entry> 
     <evaluate expression="multimediaProvider.showPages('picture')" result="viewScope.pagesList"/> 
    </on-entry> 

    <transition on="goMain" to="finishSubFlow" /> 
    <transition on="visit" to="visitPicturePage" /> 
</view-state> 

    <view-state id="visitPicturePage" view="show_picturePage.xthml"> 
     <on-entry> 
      <set name="flowScope.code" value="requestParameters.code" /> 
     </on-entry> 
     <on-render> 
      <evaluate expression="multimediaProvider.loadPage(flowScope.code)" /> 
     </on-render> 

     <transition on="goMain" to="finishSubFlow" />  
    </view-state> 

<end-state id="finishSubFlow" />