जैसा कि मैं इसे समझता हूं, स्ट्रूट 2 एक्शन क्लास उदाहरण (स्ट्रूट 1 के विपरीत) स्टेटफुल हो सकते हैं, क्योंकि प्रत्येक कार्य या किसी पोस्ट में पोस्ट बैकिंग एक्शन क्लास का एक नया उदाहरण बनाता है।स्ट्रेट्स 2, सत्यापन और राज्य संबंधी कार्रवाइयों को बेहतर ढंग से समझने में मेरी सहायता करें
मैं यह भी देखना एक मानक मुहावरा (पैटर्न?) इनपुट रूपों प्रदान करने के लिए है कि (?): एक ही .jsp इस तरह, दो अलग अलग कार्यों के घटक दृश्य के रूप में प्रयोग किया जाता है:
<action name="showForm" class="defaultActionThatDoesNothingExceptReturnSuccess">
<result name="success">inputForm.jsp</result>
</action>
<action name="validateAndProcessForm" class="realAction">
<result name="input">inputForm.jsp</result>
<result name="success">formProcessed.jsp</result>
</action>
पहली क्रिया इनपुट को प्रमाणित किए बिना या प्रसंस्करण के बिना फॉर्म को प्रदर्शित करती है। दूसरा कार्रवाई करने के लिए .jsp पदों में प्रपत्र:
<s:form action="validateAndProcessForm" method="post">
और है कि दूसरी कार्रवाई तैनात क्षेत्रों/मानकों की पुष्टि करता है, "इनपुट" लौटने यदि प्रपत्र के आदानों अपूर्ण या अमान्य है, या वास्तव में कार्रवाई बुला कक्षा execute
यदि इनपुट पूर्ण और मान्य हैं, इस प्रकार फॉर्म को प्रोसेस करना और (उदाहरण) formProcessed.jsp
लौटा रहा है जो "आपके इनपुट के लिए धन्यवाद" जैसा कुछ प्रदर्शित करता है।
तो हम "पिकेट बाड़" मुहावरा की इस तरह है:
defaultAction- -> realAction-
| | | |
-> input.jsp- <--- -> success.jsp
यह किया जाता है ताकि पहली बार input.jsp
प्रदर्शित किया जाता है, सत्यापन बुलाया नहीं कर रहे हैं (और इसलिए सत्यापन त्रुटियों नहीं दिखाए जाते हैं), लेकिन उस जेएसपी पर सबमिट बटन के बाद क्लिक किया गया है, "वास्तविक" क्रिया इनपुट को मान्य करेगी, संभवत: input.jsp
प्रदर्शित होने वाले अमान्य इनपुट को कॉल करने वाली त्रुटियों को पारित करने के लिए।
जो हमें वापस राज्यव्यापी, गैर-सिंगलटन कार्यों में लाता है; क्योंकि कार्रवाई राज्यव्यापी है और इस प्रकार जीईटी या पीओएसटी में साझा नहीं की जाती है, और प्रत्येक इंस्टेंस को उस जीईटी या पोस्ट के लिए तुरंत चालू किया जाता है, कार्रवाई के बारे में जानने का कोई तरीका नहीं है कि किसी विशेष सत्र ने एक ही पृष्ठ को कई बार "प्राप्त किया" है। तो showForm.action
होगा कभी नहीं सत्यापित हो रही है, और होगा हमेशा का सत्यापन (और इस शो त्रुटियों अगर पैरामीटर अमान्य हैं) geting, भले ही कि प्राप्त पहली बार एक विशेष सत्र "getted" उस URL नहीं है।
यही कारण है कि हमें "बाड़ पोस्ट" की आवश्यकता है: इनपुट को कैप्चर करने के लिए दूसरा फॉर्म केवल फॉर्म प्रदर्शित करने के लिए पहली क्रिया है।
क्या मेरी समझ सही है? क्या शुरुआती जीईटी पर इनपुट मान्य करने के लिए ऐसा करने के लिए कम वर्बोज़ तरीका है, लेकिन पोस्ट पर मान्य करने के लिए, प्रत्येक फॉर्म के लिए दो कार्य किए बिना?
प्रपत्र प्रसंस्करण फ़ॉर्म को देखने के लिए अलग-अलग कार्रवाइयों का उपयोग न करें। –