2009-09-01 16 views
6

Trabajo con un desarrollador de aplicaciones para el usuario que escribe archivos JSP. Tenemos un formulario que funciona correctamente, excepto que los errores de validación/encuadernación/procesamiento no parecen mostrarse con la etiqueta <form:errors/> de Spring.La etiqueta Spring MVC <form: errors /> no encuentra los mensajes de error

He confirmado que se está estableciendo el error, y cuál es aparentemente la ruta correcta para los errores. Supuestamente <form:errors path="*" /> debería renderizarlos todos, independientemente de la ruta, pero no muestra nada.

¿Debo ingresar en la fuente de la biblioteca de etiquetas para deducir lo que está pasando?

+1

¿Estás seguro de que el código de validación establece los errores? ¿Puedes pegar algún código? –

+0

He establecido puntos de interrupción en el código de validación, y showForm() en SimpleFormController, y veo todos los errores allí. The ModelAndView deja a showForm con errores incluidos. Pero en el jsp, la etiqueta de forma: errores no muestra nada vinculado, sin embargo, otros datos del modelo se representan correctamente. Establecí un punto de interrupción en ErrorsTag.shouldRender y siempre devuelve false, con getBindStatus() que no encuentra ningún objeto de destino. No sé cómo podría publicar ningún código, ya que está integrado en un gran sistema. Sé que si construyera un ejemplo, funcionaría perfectamente. :/ – Mojo

Respuesta

14

Respuesta simple: < formulario: errors /> debe estar dentro de un formulario <: form /> elemento para enlazar al objeto "comando" del modelo.

16

2 cosas que descubrí.

1) asegurarse de que especifica el nombre del objeto de comando/form-bean en la etiqueta de forma

<form:form method="post" enctype="multipart/form-data" commandName="salesOrder"> 

2) asegurarse de que el nombre de su forma de frijol/objeto de comando por su nombre de la clase. En el ejemplo anterior, mi clase es com.abc.xyz.SalesOrder. Si lo llamo "así que" o "ordeno" en el modelo, entonces no mostrará los errores.

+3

+1 para el punto (2). ¡Realmente contra-intuitivo! ¡Gracias! – weekens

+0

El segundo punto es muy extraño pero funciona – gstackoverflow

1

No sé si tuve el mismo problema. Mi problema fue que configuré el valor incorrecto para @ModelAttribute. Tener el valor establecido en el commandName del formulario <: form/> funciona bien.

2

Esto es solo por posteridad, ya que una respuesta ya ha sido aceptada. Yo tuve los mismos síntomas, pero el problema para mí fue que el formulario: forma valor de atributo de método distingue entre mayúsculas y minúsculas: es decir, method = "post" no mostrará errores, mientras que method = "POST" funcionará bien. De particular interés aquí es que todo funcionó como se esperaba: la vista de formulario se mostró como se esperaba porque la validación falló EXCEPTO que los errores no eran visibles en el JSP final.

Este comportamiento existirá en cualquier controlador que se extiende AbstractFormController, ya

protected boolean isFormSubmission(HttpServletRequest request) 

hace un .equals "POST" en lugar de "POST" .equalsIgnoreCase.

3

Pregunta - ¿Por qué? "Formulario: ruta de error =" xyzProperty" no se imprime error en JSP

Anserwer -

  1. BindingResult tiene nomObjeto propiedad que se une con la lista de errores en CommandName su JSP.

  2. defualt nomObjeto = su nombre de objeto. por ejemplo, si el nombre de clase es MyCareerFB continuación nomObjeto = myCareerFB. mente el primer personaje en pequeña caso, se deduce nameing frijol convención.

  3. Mantenga el valor de commandName en jsp igual que objectName, de lo contrario el error no se vinculará con el objeto y jsp nunca imprimirá el mensaje de error.

0

Es posible que no haya utilizado la convención de nomenclatura correcta para el atributo de formulario commandName. Ese fue el problema con el que me encontré.Tuve una clase llamada "XYZTask" y llamé a la forma commandName = "xyztask". Todo el mapeo de formularios funcionó, excepto que no vi los errores informados por la etiqueta. Cambié el nombre de mi clase a "XyzTask" y a la forma commandName = "xyzTask", y los errores comenzaron a funcionar.

Cuestiones relacionadas