मैंने मॉडल एट्रिब्यूट का उपयोग स्प्रिंग वेब एप्लिकेशन में ऑब्जेक्ट को बाध्य करने के लिए किया था।चेकबॉक्स मान झूठी होने पर ऑब्जेक्ट में बाध्य नहीं होते हैं?
एक बार जब मुझे लगता है कि किसी ऑब्जेक्ट में बूलियन मान ए है तो एक सत्य है, तो यदि हम ए के चेकबॉक्स को अनचेक करते हैं तो इसका मान अपडेट नहीं किया जाएगा।
उदाहरण के लिए, मेरे पास एक पाठ वस्तु है जिसमें विशेषता "सक्रिय" = सत्य है। "पाठ संपादित करें" दृश्य में, मैं एक चेकबॉक्स बनाता हूं जो "सक्रिय" में बाध्य होता है। यदि चेकबॉक्स चेक किया गया है तो चीजें अच्छी तरह से काम करती हैं (बाध्यकारी वस्तु परिवर्तन को प्रतिबिंबित करती है), लेकिन अगर हम चेकबॉक्स को अनचेक करते हैं तो ऑब्जेक्ट सबक नहीं बदलेगा।
आगे का अध्ययन मुझे बताता है कि ऐसा इसलिए है क्योंकि चेकबॉक्स मान ब्राउज़र द्वारा सबमिट नहीं किया जा सकता है (यह HTML का एक इन-डिज़ाइन है)। इसलिए मुझे यह निर्धारित करने के लिए बदसूरत request.getParameter
का उपयोग करना है या नहीं।
मैं बस this question द्वारा आया हूं, और मुझे लगता है कि एएसपीनेट एमवीसी इसके आसपास और अधिक सुंदर ढंग से काम करने का एक तरीका प्रदान करता है। मुझे लगता है कि वसंत को कुछ समान प्रदान करना होगा। क्या किसी को पता है यह कैसे किया जाता है?
नियंत्रक कोड:
@RequestMapping(value="/test", method = RequestMethod.POST)
public String processEditLesson(@Valid Lesson lesson, BindingResult bindingResult, Model model) {
System.out.println("Lesson is active: " + lesson.isActive()); // still "true" even if the checkbox is unset
// Current work-around
String isActive = request.getParameter("active");
if (StringUtils.isNotNullOrEmpty(isActive)) {
lesson.setActive(true);
} else {
lesson.setActive(false);
}
...
}
देखें कोड:
<form id="lesson" class="EditorForm" action="${rc.getContextUrl('/test.html')}" method="post" >
<fieldset>
<legend><@spring.message code="lesson.edit"/></legend>
<@spring.formHiddenInput "lesson.id" />
<@spring.formHiddenInput "lesson.studio.id" />
<div class="Entry">
<label for="name"><@spring.message code="lesson.message"/></label>
<@spring.formInput "lesson.message" />
<span class="ErrorMessage"><@spring.showErrors "<br/>" /></span>
</div>
<input type="checkbox" name="active" checked="checked" />
<label for="active">${rc.getMessage('lesson.active')}</label>
<input type="submit" value="<@spring.message code='common.update' />" />
</fieldset>
</form>
धन्यवाद, आप इस तरह से कैसे जानते हैं? मेरा मतलब है, मैंने कोई परिणाम खोजने के बिना बहुत कुछ खोजा है। बस थोड़ा सा फिक्स: मुझे इसे काम करने के लिए "_activeon.active" के बजाय "_active" का उपयोग करने की आवश्यकता है। –
मैंने नामों को सही किया है। - मुझे यह कैसे पता है? मैं 5 साल से अधिक के लिए पेशेवर तरीके से स्प्रिंग एमवीसी कर रहा हूं। जब मैंने यह सवाल शुरू किया तो यह बहुत लोकप्रिय था। बीटीडब्ल्यू: यदि आप स्प्रिंग चेकबॉक्स जेएसपी टैग का उपयोग करते हैं, तो छुपा दायर पहले से ही शामिल है। – Ralph
उपयोगी जानकारी। हालांकि मुझे लगता है कि तत्व का नाम '.' है, तो मान स्वचालित रूप से नहीं बदलेगा। मुझे लगता है कि मुझे जावास्क्रिप्ट – abiieez