Estoy intentando escribir validators en el marco Spring MVC, pero hay una omisión evidente en la documentación. Al llamar al pasar un error al objeto Errors, la mayoría de los métodos esperan un parámetro String llamado errorCode. Estos códigos de error, si entiendo correctamente, sirven como bases para mensajes de error específicos. Pero no puedo por la vida averiguar dónde se asignan estos códigos.¿Dónde se resuelven los códigos de error de validación Spring MVC?
Aquí hay un ejemplo de lo que me refiero a Spring MVC's Javadoc;
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 me puede aclarar?
Gracias por la información, esto me da suficiente para hacer uso de mi validador. Pero con el interés de saber qué haría si quisiera volver a conectar un MessageCodeResolver personalizado, ¿a dónde iría? También solo por la prosperidad, el javadoc de ResourceBundleMessageSource está en http://static.springsource.org/spring/docs/2.5.x/api/org/springframework/context/support/ResourceBundleMessageSource.html. –
Si desea utilizar un MessageCodeResolver personalizado, puede asignar uno para un controlador determinado. Un enfoque, entonces, es utilizar la herencia de bean para hacer que todos los beans del controlador hereden de una definición de bean de controlador, como se describe aquí: http://forum.springsource.org/showthread.php?t=46336 No hay actualmente una manera para definir un MessageCodeResolver personalizado globalmente; hay una solicitud de mejora aquí: https://jira.springsource.org/browse/SPR-5187 –
Como referencia, la característica global personalizada 'MessageCodeResolver' se implementó finalmente en Spring 3.1 (2011). Ver también [SPR-6506] (https://jira.spring.io/browse/SPR-6506). – vallismortis