मुझे समस्याएं समझ रही हैं कि स्प्रिंग 3 एमवीसी काम में कोई फॉर्म कैसे सबमिट करता है।फॉर्म स्प्रिंग एमवीसी 3 में सबमिट करें - स्पष्टीकरण
मैं क्या करना चाहता हूं, एक नियंत्रक बनाना है जो उपयोगकर्ता का नाम ले लेगा और उसे प्रदर्शित करेगा। और किसी भी तरह से मैंने इसे किया है लेकिन मुझे वास्तव में समझ में नहीं आता कि यह कैसे काम करता है।
@Controller
public class HomeController {
@RequestMapping(value = "/", method = RequestMethod.GET)
public String showHelloPage(Model model) {
model.addAttribute("person", new Person());
return "home";
}
@RequestMapping(value = "/", method = RequestMethod.POST)
public String sayHello(Person person, Model model) {
model.addAttribute("person", person);
return "home";
}
}
एक उपयोगकर्ता मैं उपयोग करने के लिए एक स्वागत संदेश प्रदर्शित करने के लिए:
<form:form method="post" modelAttribute="person">
<form:label path="firstName">First name</form:label>
<form:input path="firstName" />
<br />
<form:label path="lastName">Last name</form:label>
<form:input path="lastName" />
<br />
<input type="submit" value="Submit" />
</form:form>
मैं भी एक नियंत्रक जो इस तरह दिखता है: तो ..
मैं एक रूप है जो इस तरह दिखता है जेएसपी पृष्ठ में निम्नलिखित कोड:
<c:if test="${not empty person.firstName and not empty person.lastName}">
Hello ${person.firstName} ${person.lastName}!
</c:if>
और यह काम करता है (मैं XML कॉन्फ़िगरेशन फ़ाइलों को छोड़ देता हूं क्योंकि वे ar ई समस्या के लिए अप्रासंगिक)।
मैंने सोचा था कि एक फॉर्म में "मॉडल एट्रिब्यूट" विशेषता बीन वैरिएबल को इंगित करती है जिसे इनपुट के मानों के साथ पॉप्युलेट किया जाना चाहिए (जैसा कि उनके "पथ" गुणों में सेट किया गया है)। लेकिन लगता है, यह एक बहुत ही अलग तरीके से काम करता है। अगर मैं "showHelloPage" विधि से लाइन
model.addAttribute("person", new Person());
को दूर मैं एक (सामान्य) अपवाद "न तो BindingResult है और न ही ..." मिलता है।
इसके अलावा, शुरुआत पर, "sayHello" विधि देखा की तरह:
(...)
public String sayHello(@ModelAttribute("person") Person person, Model model) {
(...)
मेरा मतलब है, यह "ModelAttribute" एनोटेशन था। मैंने इसे जोड़ा, क्योंकि मैंने पढ़े गए ट्यूटोरियल में, यह हमेशा मौजूद था। लेकिन जब मैंने इसे हटा दिया, तो सबकुछ ठीक से काम करता था, जैसा कि पहले हुआ था।
तो मेरा प्रश्न है - "ModelAttribute" anonnatation का उपयोग क्या है? क्या यह किसी रूप में "मॉडल एट्रिब्यूट" विशेषता को छोड़ने का कोई तरीका है? और दूसरा भाग, एक फॉर्म बनाने के लिए तरीका (शायद कुछ एनोटेशन) स्वचालित रूप से इनपुट बीन्स के गुणों को सही बीन के गुणों (जिसे विधि पैरामीटर के रूप में घोषित किया जाएगा) को बांधने का तरीका क्या है? एक फॉर्म भेजने से पहले एक खाली बीन जोड़ने की आवश्यकता के बिना (जैसा कि मुझे अब करना है)।
आपके उत्तरों के लिए धन्यवाद (जो वसंत के दस्तावेज़ीकरण से जुड़े नहीं हैं, क्योंकि मैंने इसे पहले ही पढ़ा है)।
आपके उत्तर के लिए बहुत बहुत धन्यवाद, आपने मुझे बहुत समझाया। "ModelAttribute" एनोटेशन के बारे में सिर्फ एक और सवाल - यदि मैं आपको सही ढंग से समझता हूं, तो विधि पैरामीटर के साथ उपयोग की जाने वाली यह एनोटेशन "model.addAttribute (...)" के बराबर है? –
@ MichałTabor इसे विधि पैरामीटर के रूप में जोड़ने का प्रयास करें। मैं अनिश्चित हूं, अगर अनुरोध में कोई अनुरोध पैरामीटर नहीं है जो बाध्य किया जा सकता है, तो यह 'शून्य' वापस आ जाएगा। अन्यथा, जिस तरह से आप कर रहे हैं वह सही तरीका है। इन्हें डेटा ट्रांसफर ऑब्जेक्ट्स (या स्प्रिंग फॉर्म बैकिंग ऑब्जेक्ट्स/कमांड ऑब्जेक्ट्स) के रूप में जाना जाता है। दस्तावेज में अधिक जानकारी होनी चाहिए। –
+1, महान व्याख्या – rocketboy