2010-05-18 28 views
17

Estoy utilizando la validación basada en anotaciones, pero para uno de los formularios no puedo mostrar ningún error con la etiqueta form:errors. Cuando depuro el método, puedo ver que el BindingResult tiene errores, pero por alguna razón no se muestra en el formulario. Estoy perplejo ya que lo tengo trabajando en otras formas, pero por alguna razón esta forma particular está teniendo problemas. Cualquier puntero es muy apreciado.Spring 3 MVC - formulario: errores que no muestran los errores

Aquí hay un código del controlador, tengo el copyCartForm como @SessionAttribute así en el controlador:

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

En el JSP He intentado esto:

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

así como:

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

Ninguno de los dos funciona.

+0

Mejor nos muestran su código JSP. –

+2

Tuve que usar '@ ModelAttribute' para que esto funcione. Entonces, el formulario fue precedido por '@ModelAttribute (" copyCartForm ") @Valid CopyCart copyCartForm, resultado de BindingResult)' No estoy seguro de por qué? En otros lugares, funciona sin eso. – Eqbal

Respuesta

40

Tuve que usar @ModelAttribute para que funcionara. Entonces el formulario fue precedido por @ModelAttribute("copyCartForm") @Valid CopyCart copyCartForm, BindingResult result)

+7

Esto funcionó para mí. Parece que si el nombre del atributo de modelo (copyCartForm) no coincide con el nombre de clase del modelo (copyCart), debe especificarlo como un parámetro para el atributo @ModelAttribute. – Josh

+0

¡Hola! Gracias, estoy investigando esto en este momento y my bindingResult.hasErrors() no parece devolver nada a pesar de que he agregado anotaciones en el modelo como notnull, etc. –

5

Me enfrenté al mismo problema.

Tuve que usar el @ModelAttribute("attributeName") para obtener el error de validación en respuesta.

7

Un enfoque más, si por alguna razón no se puede utilizar @ModelAttribute("copyCartForm") cuando el uso de la siguiente manera:

@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

no estoy seguro de por qué y sufrí mucho hasta que lo he descubierto, pero hay que nombrar el bean exactamente como tu clase de frijoles Entonces copyCartForm debería ser 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"; 
    } 
} 

Esto también se debe cambiar en la etiqueta de formulario:

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