के बीच अंतर समझाएं मैं स्प्रिंग एमवीसी के लिए नया हूं। कृपया मुझे दस्तावेज़ों को अनपैक करने में मदद करें।स्प्रिंग एमवीसी: कृपया @RequestParam और @ModelAttribute
प्रलेखन
Spring MVC Documentation राज्यों (जोर मेरा):
एक विधि तर्क पर
@ModelAttribute
इंगित करता है तर्क मॉडल से प्राप्त किया जाना चाहिए। यदि मॉडल में मौजूद नहीं है, तो तर्क पहले तत्काल किया जाना चाहिए और फिर मॉडल में जोड़ा जाना चाहिए। एक बार मॉडल में मौजूद, तर्क के फ़ील्ड उन सभी अनुरोध पैरामीटर से पॉप्युलेट किए जाने चाहिए जिनके मिलान नाम हैं। WebDataBinder क्लास अनुरोध पैरामीटर नामों से मेल खाता है - क्वेरी स्ट्रिंग पैरामीटर और फॉर्म फ़ील्ड्स समेत - नाम के अनुसार विशेषता फ़ील्ड मॉडल।@RequestParam
आपके नियंत्रक में विधि पैरामीटर पर अनुरोध पैरामीटर को बाध्य करता है।
अस्वीकरण/निर्मलक
मुझे पता है कि @ModelAttribute
और @RequestParam
एक ही बात नहीं हैं, परस्पर अनन्य नहीं हैं, वही भूमिका प्रदर्शन नहीं करते, और एक साथ इस्तेमाल किया जा सकता है, this question में के रूप में - वास्तव में, का उपयोग @ModelAttribute
के क्षेत्रों को पॉप्युलेट करने के लिए किया जा सकता है। मेरा प्रश्न उनके आंतरिक कार्यों के बीच अंतर की दिशा में अधिक तैयार है।
प्रश्न:
@ModelAttribute
बीच क्या अंतर है और @RequestParam
(एक विधि तर्क, नहीं विधि पर इस्तेमाल किया)? विशेष रूप से:
- स्रोत: Do
@RequestParam
और@ModelAttribute
जानकारी/जनसंख्या, URL में अर्थात अनुरोध पैरामीटर के एक ही स्रोत है, जो एक रूप/मॉडल है किPOST
एड था के तत्वों के रूप आपूर्ति किया गया हो सकता है? - उपयोग: यह सही है कि
@RequestParam
के साथ प्राप्त चर, दूर फेंक दिया जाता है (जब तक कि एक मॉडल में पारित कर दिया) वापस कर दी है, जबकि@ModelAttribute
के साथ प्राप्त चर स्वचालित रूप से मॉडल में तंग आ चुके हैं?
या बहुत ही बुनियादी कोडिंग उदाहरणों में, इन दो उदाहरणों के बीच वास्तविक कार्य अंतर क्या है?
उदाहरण 1: @RequestParam
:
// foo and bar are thrown away, and are just used (e.g.) to control flow?
@RequestMapping(method = RequestMethod.POST)
public String testFooBar(@RequestParam("foo") String foo,
@RequestParam("bar") String bar, ModelMap model) {
try {
doStuff(foo, bar);
}
// other code
}
उदाहरण 2: @ModelAttribute
:
// FOOBAR CLASS
// Fields could of course be explicitly populated from parameters by @RequestParam
public class FooBar{
private String foo;
private String bar;
// plus set() and get() methods
}
// CONTROLLER
// Foo and Bar become part of the model to be returned for the next view?
@RequestMapping(method = RequestMethod.POST)
public String setupForm(@ModelAttribute("fooBar") FooBar foobar) {
String foo = fooBar.getFoo();
String bar = fooBar.getBar();
try {
doStuff(foo, bar);
}
// other code
}
मेरे वर्तमान समझ:
@ModelAttribute
और @RequestParam
बो वें जानकारी के लिए अनुरोध पैरामीटर पूछताछ, लेकिन वे अलग तरह से इस जानकारी का उपयोग:
@RequestParam
बस स्टैंड-अलोन चर (जो निश्चित रूप से एक@ModelAttribute
कक्षा में खेतों हो सकता है) भरता है। जब नियंत्रक किया जाता है, तब तक इन चर को फेंक दिया जाएगा, जब तक उन्हें मॉडल में खिलाया नहीं जाता है।@ModelAttribute
एक वर्ग के क्षेत्र है, जो तब मॉडल की एक विशेषता भरता दृश्य
यह सही है करने के लिए वापस भेजा जा सके भरता है?