tutorial sirve que para mvc formulario form español ejemplo docs java spring-mvc validation error-code

java - sirve - spring mvc formulario ejemplo



¿Dónde se resuelven los códigos de error de validación de Spring MVC? (3)

Estoy intentando escribir validators en el marco de Spring MVC, pero hay una omisión evidente en la documentación. Cuando se llama a pasar un error al objeto de Errors mayoría de los métodos esperan un parámetro String llamado errorCode. Estos códigos de error, si entiendo correctamente, sirven como soporte para mensajes de error específicos. Pero no puedo por la vida averiguar dónde se asignan estos códigos.

Aquí hay un ejemplo de lo que me refiero desde el Javadoc de Spring MVC;

public class UserLoginValidator implements Validator { private static final int MINIMUM_PASSWORD_LENGTH = 6; public boolean supports(Class clazz) { return UserLogin.class.isAssignableFrom(clazz); } public void validate(Object target, Errors errors) { ValidationUtils.rejectIfEmptyOrWhitespace(errors, "userName", "field.required"); ValidationUtils.rejectIfEmptyOrWhitespace(errors, "password", "field.required"); UserLogin login = (UserLogin) target; if (login.getPassword() != null && login.getPassword().trim().length() < MINIMUM_PASSWORD_LENGTH) { errors.rejectValue("password", "field.min.length", new Object[]{Integer.valueOf(MINIMUM_PASSWORD_LENGTH)}, "The password must be at least [" + MINIMUM_PASSWORD_LENGTH + "] characters in length."); } } }

¿Alguien puede iluminarme?


Estoy usando el solucionador de mensajes predeterminado.

En mi dispatcher-servlet.xml , tengo

<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource"> <property name="basename" value="messages" /> </bean>

y luego, en el nivel superior de mi directorio de clases, tengo un archivo de texto llamado "messages.properties" que contiene asignaciones como esta:

error.firstname.null=Please enter your first name. error.lastname.null=Please enter your last name.

Si desea utilizar un MessageCodesResolver personalizado, puede implementar la interfaz de MessageCodeResolver y luego definir su resolutor para un controlador dado como este:

<bean id="myController"> <property name="messageCodesResolver" ref="myMessageCodesResolver" /> </bean>

Actualmente no hay una manera de definir un MessageCodeResolver personalizado globalmente; Hay una solicitud de mejora para eso aquí . A continuación se describe un enfoque que utiliza la herencia de bean para hacer que todos los beans de controlador se hereden de una definición de bean de controlador.


Por alguna razón, si desea resolver los mensajes en el controlador de forma similar a: etiquetas jsp de errores, puede hacer lo siguiente:

//result is BindingResult List<String> errors = new ArrayList<String>(); List<ObjectError> allErrors = result.getAllErrors(); for (ObjectError error : allErrors) { String message = messageSource.getMessage(error, null); errors.add(message); }


Son resueltos por su MessageSource y un MessagesCodeResolver .

Here está la sección correspondiente en el manual de referencia:

Los mensajes de salida correspondientes a los errores de validación es lo último que debemos discutir. En el ejemplo que mostramos anteriormente, rechazamos el nombre y el campo de edad. Si vamos a enviar los mensajes de error utilizando un MessageSource , lo haremos usando el código de error que hemos dado al rechazar el campo ("nombre" y "edad" en este caso). Cuando llama (ya sea directamente o indirectamente, utilizando por ejemplo la clase ValidationUtils ) rejectValue o uno de los otros métodos de rechazo de la interfaz de Errors , la implementación subyacente no solo registrará el código que ha pasado, sino también una cantidad de Códigos de error adicionales.