Spring: Как устранить ошибку проверки -> код ошибки -> сообщение об ошибке - PullRequest
8 голосов
/ 17 ноября 2010

Весной, после проверки мы получаем BindingResult объект в controller.

Достаточно просто, если я получаю ошибки проверки, я хочу повторно отображать свою форму с сообщением об ошибке над каждым пострадавшимfield.

Таким образом, чтобы проверить наличие ошибок поля в поле username моего FormObject, я звоню:

FieldError usernameFieldError = bindingResult.getFieldError("username");

Отлично, теперь я держу объект FieldError, который, если яЯ использую DefaultMessageCodeResolver теперь содержит что-то вроде 4 возможных кодов ошибок.

Как перейти от FieldError -> Строка, которая может быть использована пользователем?

У меня есть MessageSource, определенный в контексте моего веб-приложения, поэтому я могу сопоставить один код ошибки с сообщением.

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

Какой метод я использую, чтобы определить best возможное сообщение об ошибке, которое нужно представить для ошибки поля?

  • Нужно ли написать какой-нибудь алгоритм для прохождениявсе коды ошибок и выбрать из наиболее конкретных?
  • Предоставляет ли Spring какую-либо поддержку для определения наиболее конкретного сообщения об ошибке?
  • Весь этот процесс кажется настолько длинным и запутанным, я думал, что Spring былдолжен сделать это легко.Может, я как-то совершенно не в курсе?

1 Ответ

15 голосов
/ 17 ноября 2010

Вы, как вы уже догадались, делаете для себя намного сложнее, чем нужно.Объект FieldError сам по себе является MessageSourceResolvable.Вам не нужно извлекать из него коды, а затем переносить отдельные коды вручную в источник сообщений и отправляться на поиски.Вы можете просто передать его своему MessageSource, и он найдет наиболее конкретный вариант, для которого в вашей локали определен перевод.(при условии, что ваш распознаватель кода разместил их в правильном порядке.)

Хотя в большинстве случаев вам даже не нужно этого делать.Надевать Errors на ваш вспомогательный объект и переводить его самостоятельно обычно не требуется.Пространство имен form в библиотеке jsp предоставляет тег, который ищет сообщения об ошибках для вас.Все, что вам нужно сделать, это поместить Errors в ModelMap.См. Документы:

http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/view.html#view-jsp-formtaglib-errorstag

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...