Подтвердить что ты не робот

Где разрешены коды ошибок проверки 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.");
       }
    }
 }

Может кто-нибудь просветить меня?

4b9b3361

Ответ 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);
   }