2010-12-06 6 views
9

वसंत 3 एमवीसी रीस्टफुल विधियों के सभी 4 का समर्थन करता है: प्राप्त करें, पोस्ट करें, पुट करें और हटाएं। लेकिन क्या इसकी दृश्य तकनीक उन्हें फॉर्मों पर समर्थन देती है? यदि नहीं, टैग में method विशेषता का वास्तविक उपयोग क्या है?क्या स्प्रिंग एमवीसी पीओएसटी के अलावा एचटीएमएल फॉर्म से अनुरोध कर सकता है और प्राप्त कर सकता है?

मैं प्रपत्र पर डाल विधि का उपयोग करने की कोशिश की:

<form:form action="/myaction" method="PUT"> 
    ... 
</form:form> 

जनरेट किया गया एचटीएमएल था:

<form id="command" action="/myaction" method="post"> 
    <input type="hidden" name="_method" value="PUT"/> 
    ... 
</form> 

यह most browsers don't support other methods besides GET and POST के बाद से स्पष्ट है। लेकिन वसंत इसे input के साथ _method नाम और METHOD_NAME के साथ संभाल सकता है। क्या यह?

जब मैं एक नियंत्रक विधि

@RequestMapping(method=RequestMethod.PUT) 

यह दावा करता है के साथ उसकी व्याख्या, कि अनुरोध विधि POST समर्थित नहीं है करने के लिए निर्दिष्ट फार्म भेज। लेकिन POST और PUT क्यों नहीं? वास्तव में हुड के नीचे क्या होता है?

उत्तर

16

_method नामक "छुपा पैरामीटर" का उपयोग स्प्रिंग एमवीसी की टैग लाइब्रेरी के लिए विशिष्ट नहीं है, लेकिन कुछ अन्य क्लाइंट फ्रेमवर्क द्वारा भी इसका उपयोग किया जाता है। वसंत सिर्फ सम्मेलन का पालन कर रहा है, जैसे कि यह है।

आदेश में इस ठीक से उपयोग करने के लिए, आप (, HiddenHttpMethodFilterjavadoc देखें) अपने web.xml, करने के लिए एक फ़िल्टर जोड़ें, जो HttpServletRequest में एक "वास्तविक" HTTP विधि प्रतिनिधित्व में _method पैरामीटर बदल जाता है की जरूरत है। यह इस तथ्य पर बल देने के लिए फ़िल्टर के रूप में किया जाता है कि PUT और DELETE की कमी ब्राउज़र समस्या है - सर्वलेट एपीआई इसे ठीक से समर्थन देती है।

तो यदि आप इन तरीकों का उपयोग अपने रूप में करना चाहते हैं, तो आपको उस फ़िल्टर को जोड़ने की आवश्यकता है।

पीएस "POST समर्थित नहीं" संदेश प्राप्त करने का कारण यह है कि आपका फॉर्म POST का उपयोग करता है, और आपके हैंडलर को PUT के साथ एनोटेट किया गया है, इसलिए यह मेल नहीं खाता है। चूंकि आपके पास फ़िल्टर परिभाषित नहीं है, _method पैरामीटर को अनदेखा किया जाता है।

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