2011-01-05 10 views
7

मेरे पास एक क्रिया-राज्य है जो परिणाम के आधार पर अभिव्यक्ति का मूल्यांकन करता है और फिर विभिन्न अन्य राज्यों में संक्रमण करता है। परिणाम राज्यों में से एक एक उपप्रवाह-राज्य है जो हाथों को दूसरे प्रवाह पर नियंत्रण देता है, उदाहरण;वसंत वेबफ्लो: संक्रमण के दौरान मैं एक प्रवाह से दूसरे में एक विशेषता कैसे पास करूं?

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

आप देख सकते हैं मैं इनपुट टैग के माध्यम से subflow में एक इनपुट पारित कर सकते हैं, लेकिन मेरे सवाल का मैं कैसे निर्दिष्ट और अतिरिक्त आदानों है कि मैं वर्तमान यदि और केवल यदि subflow राज्य बुलाया जा रहा है चाहता हूँ से पारित सकता है संक्रमण कार्य से? मान लें कि सबफ्लो-स्टेट "फिक्सफेल" को अन्य क्रिया-राज्यों से बुलाया जा सकता है।

मैंने बिना किसी प्रभाव के निम्नलिखित चीजों की कोशिश की है;

<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 में है, तो क्षेत्र है कि विशिष्ट प्रवाह के साथ ही है कि प्रवाह के subflows (और उनके संक्रमण में कहीं भी दिखाई दे रहा है)

  • SessionScope: (शायद नहीं है कि तुम क्या चाहते हैं) सभी प्रवाह और
    उनके subflows

अंतिम करने के लिए दिखाई दे रहा है ly आप क्षेत्र विशेषता के रूप में subflow राज्य में उदाहरण

के लिए
<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> 

अपने subflow के एक्सएमएल

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

में पारित कर सकते हैं इस उदाहरण someNumber और someNumber दो अपने subflow के गुणों के रूप में में पारित कर दिया जाता है। जिसमें आप उन्हें ${someNumber}

संपादित मूल्यांकन कर सकते हैं:

इससे आपकी टिप्पणी प्रश्न को हल करने के लिए है। आप एक विशिष्ट संक्रमण पर बातचीत दायरे में एक चर सेट करना चाहता था, तो आप कर सकते हैं:

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

फिर अपने jsp

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

हममम conversationScope मैं क्या इस मामले में मुझे लगता है कि चाहते हैं की तरह लगता है में। मैं सहमत हूं कि सत्र वही है जो मैं चाहता हूं क्योंकि उपयोगकर्ता पहली बार समाप्त होने के बाद इन प्रवाहों को दोहराएगा और कोई भी सत्र विशेषता नहीं रहेगी? जहां वार्तालाप स्कॉप्ड गुण गायब हो जाएंगे जब मुख्य प्रवाह समाप्त हो जाएगा और यदि उपयोगकर्ता दूसरी बार मुख्य प्रवाह में प्रवेश करता है, तो सही नहीं होगा? क्या "वर्कफ़ेल" पर संक्रमण में वार्तालाप में जोड़ने का कोई तरीका है? मैं इसे क्रिया के जावा कोड में जोड़ने के बजाय xml/jsps में रखना चाहता हूं। –

+0

@ निक फुट - अपने प्रश्न का उत्तर देने के लिए मेरे संपादन पर एक नज़र डालें –

+0

चीयर्स जो एक इलाज करता है, जब आप इसे देखते हैं तो स्पष्ट है, मैं jsp में $ {converationScope.someVariable} जैसी सभी प्रकार की कोशिश कर रहा था !! –

संबंधित मुद्दे

 संबंधित मुद्दे