2015-12-10 2 views
0

У меня есть простая форма для регистрации пользователей. Эта ан-схема имеет поле "age", который является integer. Я создал форму Validator для проверки всех входов. Теперь у меня проблема с «возрастом». Если пользователь вводит строку в этом поле (вместо целого), Validator просто говорит, что есть ТипMismatch и result.hasErrors() возвращает true. Но я не знаю, как получить доступ к имени поля, чтобы передать ошибку на страницу JSP с соответствующей ошибкой. Я только был в состоянии получить доступ к имени моей формы с:имя доступа ввода от весовой формы валидатор

if(result.hasErrors()) { 
      for(ObjectError error: result.getFieldErrors()) { 
       System.out.println(error.getObjectName());//returns form name not problematic field 
      } 
} 

Так что мой вопрос: как получить доступ к имени поля (уникальное имя ввода) в валидаторе, чтобы связать ошибку с конкретным входом? Мне нужно, чтобы он послал что-то пользователю, говоря, что он отжимает «возраст».

+0

Зачем вам это нужно? Имеются коды ошибок, один из которых подобен 'formname.field.TypeMismatch' (или наоборот).В основном то, что вы хотите, уже поддерживается из коробки с сообщениями об ошибках/привязкой, поэтому не уверен, почему вы пытаетесь обойти это. –

+0

См. Отредактированный вопрос. Я хочу отправить что-то пользователю. Например, «Ты попал в неправильный возраст». Но я не могу уловить условие в пределах Валидатора. Я имею в виду, что я хочу, чтобы какое-то условие cathc: полевый возраст имеет несоответствие и отправляет конкретную ошибку в конкретное поле ввода. – ovod

+0

Как уже говорилось, это уже поддерживается по умолчанию, и поэтому я удивляюсь, почему вы изобретаете колесо и работаете с каркасом, а не с каркасом. –

ответ

1

Работа с каркасом не с каркасом (см. Также Errors Tag в справочном руководстве.).

Сначала создайте файл свойств, содержащий необходимые коды ошибок. Как генерируются коды ошибок, определяется в DefaultMessageCodesResolver. В основном это делает следующий

Например, в случае кода "typeMismatch", имя объекта "пользователь", поле "возраст":

  1. попробовать "typeMismatch.user.age"
  2. попробуйте "typeMismatch.age"
  3. попробовать "typeMismatch.int"
  4. попробовать "typeMismatch"

Теперь, предположив, что ваша модель имеет имя пользователя, добавьте следующее в файл свойств (предположим, что оно называется messages.properties.).

typeMismatch.user.age=Entered value is not a valid age. 
typeMismatch.int=Entered value is not an integer. 

Теперь удалите код, который вы имеете в контроллере (оставьте чек на hasError как вы, вероятно, хотите, чтобы повторно отобразить страницу).

Определите MessageSource в вашей конфигурации для DispatcherServlet (если у вас еще нет).

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

Теперь в вашем JSP просто добавить <form:errors path="*" /> в верхней и вуаля вы будете иметь ошибку на странице. Добавленный бонус вы можете принять во внимание язык пользователей, если хотите.

Если вы хотите показать ошибки рядом с полем, вы можете сделать что-то вроде этого.

<div> 
    <div><label for="age">Age</label></div> 
    <div><form:input path="age" id="age" /></div> 
    <div><form:errors path="age" cssClass="error" /></div> 
</div> 

Теперь ошибка отображается после поля.

Не нужно возиться с этими вещами самостоятельно.

+0

Ваш первый вариант отлично работал. – ovod

Смежные вопросы