2010-05-18 12 views
17

मैं एनोटेशन आधारित सत्यापन का उपयोग कर रहा हूं लेकिन एक रूप में मैं form:errors टैग का उपयोग करके कोई त्रुटि दिखाने में सक्षम नहीं हूं। जब मैं विधि को डीबग करता हूं, तो मैं देख सकता हूं कि BindingResult में त्रुटियां हैं, लेकिन किसी कारण से इसे फ़ॉर्म पर प्रदर्शित नहीं किया जा रहा है। मैं फंस गया हूं क्योंकि मुझे यह अन्य रूपों पर काम कर रहा है, लेकिन किसी कारण से इस विशेष रूप में समस्याएं हैं। किसी भी पॉइंटर्स की बहुत सराहना की जाती है।स्प्रिंग 3 एमवीसी - फॉर्म: त्रुटियां त्रुटियों को नहीं दिखाती

यहाँ नियंत्रक से कुछ कोड है, मैं नियंत्रक के रूप में अच्छी तरह से एक के रूप में @SessionAttribute copyCartForm है:

@RequestMapping(params="action=Confirm Copy", method=RequestMethod.POST) 
public String copyCart(@Valid CopyCart copyCartForm, BindingResult result) { 
    if (result.hasErrors()) { 
     logger.debug("errors in form" + result.toString()); 
     return "copyshoppingcart"; 
    } else { 
        ... 
        ... 
     return "redirect:/home"; 
    } 
} 

JSP में मैं इस की कोशिश की है:

<form:errors path="*" cssClass="formError"/> 

रूप में अच्छी तरह के रूप में:

<form:errors path="fieldName" cssClass="formError"/> 

न तो काम करता है।

+0

बेहतर हमें अपने JSP कोड दिखाते हैं। –

+2

मुझे यह काम करने के लिए '@ ModelAttribute' का उपयोग करना पड़ा। तो फॉर्म पहले से @ModelAttribute ("copyCartForm") @Valid CopyCart copyCartForm, BindingResult परिणाम) ' सुनिश्चित नहीं था कि क्यों? अन्य स्थानों पर यह इसके बिना काम करता है। – Eqbal

उत्तर

40

मुझे यह काम करने के लिए @ModelAttribute का उपयोग करना पड़ा। तो फॉर्म @ModelAttribute("copyCartForm") @Valid CopyCart copyCartForm, BindingResult result)

+7

यह मेरे लिए काम किया। ऐसा लगता है कि यदि आपका मॉडल विशेषता नाम (copyCartForm) मॉडल (कॉपीकार्ट) के वर्ग नाम से मेल नहीं खाता है जिसे आपको @ModelAttribute विशेषता के पैरामीटर के रूप में निर्दिष्ट करना है। – Josh

+0

हे! धन्यवाद, मैं अभी इस पर देख रहा हूं और मेरा बाध्यकारीResult.hasErrors() ऐसा कुछ प्रतीत नहीं होता है, भले ही मैंने मॉडल जैसे एनोटल आदि पर एनोटेशन जोड़ा हो। –

5

से पहले था, मुझे एक ही समस्या का सामना करना पड़ा।

मुझे प्रतिक्रिया में सत्यापन त्रुटि वापस पाने के लिए @ModelAttribute("attributeName") का उपयोग करना पड़ा।

7

एक और दृष्टिकोण, किसी कारण से आप @ModelAttribute("copyCartForm") का उपयोग नहीं कर सकते जब उपयोग अनुवर्ती:

@RequestMapping(method=RequestMethod.POST) 
public String post(@Valid CopyCart copyCartForm, BindingResult bindingResult, ModelMap modelMap) { 
    if (bindingResult.hasErrors()) { 
     modelMap.put(BindingResult.class.getName() + ".copyCartForm", bindingResult); 
     return "copyshoppingcart"; 
    } 
    return "redirect:/home"; 
} 
1

मैं जब तक मैं यह पता लगा क्यों और मैं एक बहुत का सामना करना पड़ा यकीन नहीं है, लेकिन आप अपने सेम को नाम देना बिल्कुल आपकी बीन कक्षा के रूप में। तो copyCartForm सिर्फ copyCart होना चाहिए।

@RequestMapping(params="action=Confirm Copy", method=RequestMethod.POST) 
public String copyCart(@Valid CopyCart copyCart, BindingResult result) { 
    if (result.hasErrors()) { 
     logger.debug("errors in form" + result.toString()); 
     return "copyshoppingcart"; 
    } else { 
        ... 
        ... 
     return "redirect:/home"; 
    } 
} 

यह भी प्रपत्र टैग पर परिवर्तित किया जाना चाहिए:

<form:form action="....." method="..." commandName="copyCart">