2011-01-21 12 views
10

में रीडायरेक्ट और चेन परिणाम प्रकारों का उपयोग कब करें रीडायरेक्ट एक्शन का उपयोग करते समय मेरे स्ट्रैट्स 2 प्रोजेक्ट में मैं अपने सभी मानों जैसे कि एक्शन एरर और फील्ड त्रुटियों को खो रहा हूं।स्ट्रेट्स 2

मैं इसे नेट पर देखा और पाया 2 विकल्प

  • चेन - यह बहुत मैं donno नहीं किया जाता है क्यों ..
  • MessageStoreInterceptor - यह की जरूरत है हर कार्रवाई में रखा जा रहा

तो क्या कोई मुझे कृपया बता सकता है कि रीडायरेक्ट (या रीडायरेक्टएक्शन) को प्राथमिकता दी जाती है और जब श्रृंखला को प्राथमिकता दी जाती है।

+0

आप अनुरोधों के बीच कार्रवाई या क्षेत्र त्रुटियों रखने की जरूरत नहीं होनी चाहिए। कृपया विस्तार से समझाएं कि आप क्या करने की कोशिश कर रहे हैं ताकि हम उचित समाधान खोजने में आपकी सहायता कर सकें। –

उत्तर

12

एक क्रिया को पुनर्निर्देशित करने से वर्तमान मान स्टैक (अनुरोध स्कोप में कुछ भी) खो देता है, आप निश्चित रूप से अगली कार्रवाई के पैरामीटर के रूप में उन्हें पास करके इन मानों को संरक्षित करने के लिए अपनी कार्रवाई सेट कर सकते हैं, लेकिन यह दर्द का थोड़ा सा है।

चेन वैल्यू स्टैक को संरक्षित करता है, इसलिए अगली कार्रवाई पिछली कार्रवाई से बनाए गए पैरामीटर पर स्पष्ट रूप से उन्हें पास करने की आवश्यकता के बिना काम कर सकती है, क्योंकि यह बर्फ बॉल प्रभाव भी है, आप दृश्य में सभी पैरामीटर का उपयोग कर सकते हैं।

लेकिन आम तौर पर यह माना जाता है कि एक शीर्ष डाउन सॉल्यूशन (शायद ऊपर सबसे अच्छा शब्द नहीं है ... 'संरचित') स्पेगेटी कार्यों की भूलभुलैया बनाने से बेहतर है।

तो जब आप कुछ काम करने के दबाव में हैं और struts2 से अधिक परिचित नहीं हैं तो श्रृंखला या पुनर्निर्देशन का उपयोग करें, और फिर निश्चित रूप से वापस आएं और इसे ठीक करें! आम तौर पर आपको एक इंटरसेप्टर का उपयोग करना चाहिए।

किसी ऐसी स्थिति की स्थिति में जो कुछ स्थितियों के आधार पर अन्य कार्रवाइयों के मार्गों की ओर जाता है, यह बेहतर होगा कि एक इंटरसेप्टर पैकेज पर लागू हो और उस पैकेज में इस दिलचस्प व्यवहार की आवश्यकता वाले सभी कार्यों को रखे। फिर यह बहुत स्पष्ट है कि यह किस क्रिया पर लागू होता है।

1

पहले विकल्प

<action name="remove" class="com.action.firstAction" method="remove"> 
     <result name="success" type="redirectAction"> 
      secondaction 
      <param name="actionName">secondaction</param> 
      <param name="namespace">/</param> 
      <param name="param name">${param value}</param> 
     </result>   
    </action> 
<action name="secondaction" class="com.action.secondAction" method="result"> 
    <result name="success">result.jsp</result> 
</action> 

एक अन्य विकल्प

<action name="remove" class="com.action.firstAction" method="remove"> 
    <result name="success" type="chain">secondaction</result> 
</action> 
<action name="second action" class="com.action.secondAction" method="result"> 
    <result name="success">result.jsp</result> 
</action> 
संबंधित मुद्दे