2011-01-05 75 views
7

我有一個動作狀態,評估一個表達式,然後根據結果轉換到各種其他狀態。其中一個結果狀態是將控制權交給另一個流的子流狀態,例如;Spring Webflow:如何在轉換期間將屬性從一個流傳遞到另一個流?

<action-state id="doWork"> 
    <evaluate expression="someAction.doWork(someInput)" /> 
<transition on="WORKSUCCESS" to="workSuccess" /> 
<transition on="WORKFAIL" to="fixFail" /> 
</action-state> 

<subflow-state id="fixFail" subflow="someOtherPlace/someOtherWorkToFixFail"> 
    <input name="someNumber" value="1" type="java.lang.Integer" /> 
    <transition on="finish" to="workSuccess" /> 
</subflow-state> 

正如你看到的,我可以通過輸入到通過輸入標籤的子流,但我的問題是我怎麼能指定並傳遞我要當且僅當子流狀態被稱爲附加輸入從過渡WORKFAIL?假設子流狀態「fixFail」可以從其他動作狀態調用。

我試過類似下面的東西沒有效果;

<action-state id="doWork"> 
    <evaluate expression="someAction.doWork(someInput)" /> 
<transition on="WORKSUCCESS" to="workSuccess" /> 
<transition on="WORKFAIL" to="fixFail"> 
      <attribute name="newInput" value="3000" type="java.lang.Integer" /> 
    </transition> 
</action-state> 

<subflow-state id="fixFail" subflow="someOtherPlace/someOtherWorkToFixFail"> 
    <input name="someNumber" value="1" type="java.lang.Integer" /> 
    <input name="someNumber2" value="flowScope.newInput" type="java.lang.Integer" /> 
    <transition on="finish" to="workSuccess" /> 
</subflow-state> 

回答

13

有三種方法可以做到這一點。你可以通過交談,會話或傳入屬性做

  • ConversationScope:如果一個字段是conversationScope領域是在特定的流量,以及該流程的子流程(和他們的過渡隨時隨地可見)

  • SessionScope:(也許不是你想要 )對所有流量和
    其支流

決賽可見LY,你可以通過字段屬性爲子流狀態,例如

<subflow-state id="fixFail" subflow="someOtherPlace/someOtherWorkToFixFail"> 
    <input name="someNumber" value="1" type="java.lang.Integer" /> 
    <input name="someNumber2" value="flowScope.newInput" type="java.lang.Integer" /> 
    <transition on="finish" to="workSuccess" /> 
</subflow-state> 

在你的子流程的XML

<?xml version="1.0" encoding="UTF-8"?> 
<flow> 
    <input name="someNumber"/> 
    <input name="someNumber2"/> 
    ... 
</flow> 

在這個例子中someNumber和someNumber兩者中傳遞過來的屬性你的子流程。在這您可以評估他們作爲${someNumber}

編輯:

這是解決您的評論的問題。如果你想設置的談話範圍變量在特定的過渡,你可以這樣做:

<transition on="WORKFAIL" to="fixFail" > 
    <set name="conversationScope.someVariable" value="Hello World"/> 
</transition> 

然後在你的JSP

${someVariable} <!-- This will print out 'Hello World' --> 
+0

哼哼的conversationScope聽起來像什麼,我想在這種情況下,我認爲。我同意這個會話是我想要的,因爲用戶在第一次完成後重複這些流程,並且任何會話屬性都不會保留?當主要流程完成時,對話範圍的屬性會消失,如果用戶第二次輸入主要流程則不會出現,對嗎? 有沒有辦法在=「WORKFAIL」的過渡中添加到conversationScope中?我想將它保存在xml/jsps中,而不是添加到操作的Java代碼中。 – 2011-01-06 11:39:45

+0

@Nick Foote - 看看我的編輯回答你的問題 – 2011-01-06 14:34:55

+0

乾杯,當你看到它時很明顯,我在jsp上嘗試各種各樣的東西,像$ {converationScope.someVariable}! – 2011-01-06 15:04:25

相關問題