2010-05-18 23 views
17

Sto utilizzando la convalida basata sull'annotazione ma per uno dei moduli non sono in grado di mostrare alcun errore utilizzando il tag form:errors. Quando eseguo il debug del metodo, è possibile vedere che lo BindingResult presenta errori, ma per qualche motivo non viene visualizzato nel modulo. Sono perplesso perché ho lavorato su altre forme, ma per qualche motivo questa particolare forma sta avendo problemi. Qualsiasi suggerimento è molto apprezzato.Spring 3 MVC - modulo: errori non mostrano gli errori

Ecco il codice dal controller, ho la copyCartForm come @SessionAttribute pure nel controller:

@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"; 
    } 
} 

Nella JSP Ho provato questo:

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

pure come:

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

Né funziona.

+0

ci mostrano meglio il vostro codice JSP. –

+2

Ho dovuto usare '@ ModelAttribute' per farlo funzionare. Quindi il modulo è stato preceduto da '@ModelAttribute (" copyCartForm ") @Valid CopyCart copyCartForm, risultato BindingResult)' Non sei sicuro del perché? In altri posti funziona senza questo. – Eqbal

risposta

40

Ho dovuto usare @ModelAttribute per farlo funzionare. Quindi il modulo era preceduto da @ModelAttribute("copyCartForm") @Valid CopyCart copyCartForm, BindingResult result)

+7

Questo ha funzionato per me. Sembra che se il nome dell'attributo del modello (copyCartForm) non corrisponde al nome della classe del modello (copyCart), è necessario specificarlo come parametro all'attributo @ModelAttribute. – Josh

+0

Ehi! Grazie, sto cercando proprio adesso e il mio bindingResult.hasErrors() non sembra restituire nulla anche se ho aggiunto annotazioni sul modello come notnull ecc. –

5

Ho affrontato lo stesso problema.

Ho dovuto utilizzare @ModelAttribute("attributeName") per ottenere di nuovo l'errore di convalida in risposta.

7

più Un approccio, se per qualche motivo non è possibile utilizzare @ModelAttribute("copyCartForm") quando l'uso di follow:

@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

non so perché e ho sofferto molto fino a quando ho capito, ma devi chiamare il bean esattamente come la tua classe di fagioli. Quindi copyCartForm dovrebbe essere solo 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"; 
    } 
} 

questo deve anche essere cambiata sul tag form:

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