Spring Flow: передача объекта назад и вперед между Main WebFlow и Subflow - PullRequest
2 голосов
/ 25 октября 2011

Я вызываю подпоток из основного потока.Мне удалось передать объект ShareHolderProfile в SubFlow из MainFlow.Однако я не уверен, что этот же объект не передается обратно в MainFlow или у меня нет доступа к нему в моем JSP.Вот как я это делаю.

MainFlow.xml

<?xml version="1.0" encoding="UTF-8"?>
<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"
start-state="retriveAccount">

    <var name="acctProfile" class="com.abc.xyz.account.ShareHolderProfile"/>

    <view-state id="retriveAccount" view="AccountView">
        <transition on="Success" to="createAccountSubFlow"/>
    </view-state>

    <subflow-state id="createAccountSubFlow" subflow="createAccountSubFlow">
        <input name="acctProfile" value="acctProfile"/>     
        <transition on="finish" to="showAlternateRoute"/>
    </subflow-state>    

    <view-state id="showAlternateRoute" view="showAlternateView" model="acctProfile">
        <on-entry>
            <evaluate someExpression result="viewScope.SomeValue"/>
        </on-entry> 
        <transition on="viewAction" to="accountDetails"/>       
    </view-state>

SubFlow.xml

<?xml version="1.0" encoding="UTF-8"?>
<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"
start-state="showAccount">

    <input name="acctProfile" />    

    <view-state id="showAccount" view="randomView" model="acctProfile">
        <on-entry>
            <evaluate expression="SomExpression"/>  
        </on-entry>  
        <transition on="SomeEvent" to="NextState"/>
    </view-state>

    <view-state id="NextState" view="SomeRandomView" model="acctProfile">
         <on-entry>
             <evaluate expression="controller.Method(acctProfile)" result="viewScope.profileForm"/>
         </on-entry>
         <transition on="viewResult" to="finish"/>
    </view-state>

    <end-state id="finish" />

Теперь, по большей части, потоки в приложениях работают нормально.Однако проблема в том, что я пытался получить доступ к некоторым атрибутам (переменная-член) из acctProfile в одном из моих jsp.Что-то вроде - acctProfile.FirstName

Однако я не могу этого сделать.Является ли объект acctProfile не передаваемым из subFlow в Mainflow или я его неправильно использую в JSP.Пожалуйста, порекомендуйте.

Заранее спасибо

1 Ответ

7 голосов
/ 02 февраля 2012

2 вещи:

  1. Когда вы объявляете входной (или выходной) параметр, обязательно добавьте тип передаваемого вами объекта (возможно, поэтому вы не можете получить доступ к атрибутам actProfile). Например, если actProfile имеет тип класса com.mycompany.ActProfile, то вы должны объявить его следующим образом:

    <input name="acctProfile" value="actProfile" type="com.mycompany.ActProfile" />

    Это необходимо сделать как в файле MainFlow.xml , так и SubFlow.xml.

  2. Чтобы получить доступ назад к actProfile (от SubFlow до MainFlow), вы должны объявить его как выходную переменную из вашего SubFlow в MainFlow. Вот как это делается:

MainFlow.xml:

<subflow-state id="createAccountSubFlow" subflow="createAccountSubFlow">
    <input name="actProfile" value="actProfile" type="com.mycompany.ActProfile" />  
    <output name="actProfile" value="actProfile" type="com.mycompany.ActProfile" /> 
    <transition on="finish" to="showAlternateRoute"/>

Аналогично, в SubFlow.xml:

<end-state id="finish" >
 <output name="actProfile" value="actProfile" type="com.mycompany.AcctProfile" />
</end-state>
...