2012-01-26 2 views
5

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

У меня есть только одно поле формы 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 Может не полный запрос org.springframework.beans.TypeMismatchException: Не удалось преобразовать значение значения типа 'java.lang.String' в требуемый тип 'int'; вложенная исключение java.lang.NumberFormatException: Для ввода строки: «д»

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

ответ

3

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

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

(15.3.2.3 Supported handler method arguments and return types)

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

  • Я думаю, вы можете попробовать использовать Выборочная MethodArgumentResolver (см это blog для примера).
  • Существует еще один вопрос с открытым потоком открытого потока: How to customize parameter names when binding spring mvc command objects - У меня такое ощущение, что решение для этого вопроса может дать вам хороший вклад для вашего решения.

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

+0

хорошо, если оно не поддерживается из коробки, то я думаю, Я могу жить с одним бонусом, спасибо –

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