Где разрешены коды ошибок проверки w760> MVC?
Я пытаюсь написать валидаторы в рамках Spring MVC, но в документации есть явное отсутствие. При вызове передачи ошибки в объект Errors большинство методов ожидают параметр String с именем errorCode. Эти коды ошибок, если я правильно понимаю, выступают в качестве stand-in для конкретных сообщений об ошибках. Но я не могу понять, где эти коды сопоставляются.
Вот пример того, что я имею в виду от Spring MVC 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.");
}
}
}
Может кто-нибудь просветить меня?
Ответы
Ответ 1
Я использую распознаватель сообщений по умолчанию.
В моем dispatcher-servlet.xml
у меня есть
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basename" value="messages" />
</bean>
а затем на верхнем уровне моего каталога классов у меня есть текстовый файл с именем "messages.properties", который содержит такие сопоставления:
error.firstname.null=Please enter your first name.
error.lastname.null=Please enter your last name.
Если вы хотите использовать собственный MessageCodesResolver, вы можете реализовать интерфейс MessageCodeResolver, а затем определить свой резольвер для данного контроллера следующим образом:
<bean id="myController">
<property name="messageCodesResolver" ref="myMessageCodesResolver" />
</bean>
В настоящее время нет способа определить пользовательский MessageCodeResolver
глобально; там запрос улучшения для этого здесь. Один подход с использованием наследования bean, чтобы сделать весь контроллер beans наследованием от одного определения контроллера bean, описан здесь.
Ответ 2
Они разрешены вашим MessageSource и MessageCodeResolver.
Здесь - соответствующий раздел справочного руководства:
Вывод сообщений, соответствующих ошибкам проверки, - это последнее, что нам нужно обсудить. В приведенном выше примере мы отклонили имя и возрастное поле. Если мы собираемся выводить сообщения об ошибках с помощью MessageSource
, мы сделаем это, используя код ошибки, который мы указали при отклонении поля (в данном случае - "имя" и "возраст" ). Когда вы вызываете (прямо или косвенно, используя, например, класс ValidationUtils
) rejectValue
или один из других методов отклонения из интерфейса Errors
, базовая реализация будет не только зарегистрировать код, который вы передали, но также и ряд дополнительных кодов ошибок.
Ответ 3
По какой-то причине, если вы хотите разрешить сообщения в контроллере, похожие на теги error: jsp, вы можете сделать следующее:
//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);
}