любой способ получить BindingResult для @RequestParam? - PullRequest
6 голосов
/ 26 января 2012

Я использую Spring 3 Portlet MVC. Проверка / привязка только в MVC должна быть одинаковой.

У меня есть только одно поле формы int. Когда я делаю

void doSmth(MyForm form, BindingResult bindingResult) throws ... {
  int bindErrors = bindingResult.getErrorCount())
  ...

и отправка значения поля, которое не может быть проанализировано как int, этот метод выполняется, и bindErrors равно 1. Значение поля формы, которое получает этот метод, равно 0. Это здорово.

Но создавать форму, содержащую только одно поле, не очень хорошо.

Я меняю код на:

void doSmth(@RequestParam int userId, BindingResult bindingResult) ... {
  int bindErrors = bindingResult.getErrorCount())
  ...

и получение Портлет недоступен сообщение в браузере и это исключение:

org.springframework.web.portlet.FrameworkPortlet processRequest Could не полный запрос org.springframework.beans.TypeMismatchException: не удалось преобразовать значение типа 'java.lang.String' в требуемый тип 'int'; вложенными исключение java.lang.NumberFormatException: для входной строки: "q"

Вопрос: есть ли способ продолжить выполнение метода и обработать в нем ошибки привязки, даже если преобразование типа @RequestParam завершится неудачно? Я попытался сделать @RequestParam необязательным и указать для него значение по умолчанию - не помогло.

1 Ответ

3 голосов
/ 26 января 2012

Ссылка Spring допускает BindingResult только для объектов команды или формы.

org.springframework.validation.Errors / org.springframework.validation.BindingResult результаты проверки для предыдущей команды или объекта формы (непосредственно перед аргументом метода).

(15.3.2.3 Поддерживаемые аргументы метода обработчика и возвращаемые типы)

Так что вам может потребоваться реализовать его самостоятельно.

или вы заключаете свой одиночный int в объект команды и используете результат привязки для этого объекта (пример можно найти здесь: https://stackoverflow.com/a/13407434/280244)

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