Ich versuche, validators unter dem Spring MVC-Framework zu schreiben, aber es gibt eine eklatante Unterlassung in der Dokumentation. Beim Aufruf eines Fehlers an das Objekt Errors erwarten die meisten Methoden einen String-Parameter namens errorCode. Diese errorCodes, wenn ich das richtig verstehe, dienen als Ersatz für spezifische Fehlermeldungen. Aber ich kann nicht fürs Leben herausfinden, wo diese Codes abgebildet sind.Wo werden die Spring MVC Validierungsfehlercodes aufgelöst?
Hier ist ein Beispiel von dem, was ich von Spring MVC Javadoc beziehen;
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.");
}
}
}
Kann mir jemand aufklären?
Danke für die Information, das gibt mir genug, um meinen Validator zu nutzen. Aber im Interesse des Lernens, was würde ich tun, wenn ich in einem benutzerdefinierten MessageCodeResolver neu verkabeln wollte, wohin würde ich gehen? Auch nur für Wohlstand ResourceBundleMessageSource ist Javadoc unter http://static.springsource.org/spring/docs/2.5.x/api/org/springframework/context/support/ResourceBundleMessageSource.html. –
Wenn Sie einen benutzerdefinierten MessageCodeResolver verwenden möchten, können Sie einen für einen bestimmten Controller zuweisen. Ein Ansatz besteht also darin, die Bean-Vererbung zu verwenden, um alle Controller-Beans von einer Controller-Bean-Definition zu erben, wie hier beschrieben: http://forum.springsource.org/showthread.php?t=46336 Es gibt derzeit keinen Weg um einen benutzerdefinierten MessageCodeResolver global zu definieren; Hier gibt es eine Verbesserungsanforderung: https://jira.springsource.org/browse/SPR-5187 –
Als Referenz wurde die globale benutzerdefinierte Funktion "MessageCodeResolver" schließlich in Spring 3.1 (2011) implementiert. Siehe auch [SPR-6506] (https://jira.spring.io/browse/SPR-6506). – vallismortis