Spring3 ModelAttribute из параметров запроса jsp

Можно ли захватить различные компоненты формы и превратить их в соответствующие объекты DAO? Я пытаюсь избежать создания собственного компонента Bean (который инкапсулирует все поля) для каждой формы.

Ex:

<form action="/add">
  <input name="foo" id="foo" value="29"/>
  <input name="bar" id="bar" value="63"/>
</form>


public void add(@ModelAttribute("foo") Foo myFoo, @ModelAttribute("bar") Bar myBar)

В настоящее время мне пришлось бы использовать HttpRequest, извлекать значения (29,63) и использовать их в качестве первичных ключей для поиска правильных объектов базы данных. Я не знал, есть ли быстрый способ автоматически связать это с помощью ModelAttribute.

Спасибо!


person user973479    schedule 09.11.2011    source источник


Ответы (1)


Вы должны использовать @RequestParam

public void add(@RequestParam("foo") Foo myFoo, @RequestParam("bar") Bar myBar) {
}
person Peter Szanto    schedule 09.11.2011
comment
org.springframework.beans.ConversionNotSupportedException: не удалось преобразовать значение типа «java.lang.String» в требуемый тип «Foo»; вложенным исключением является java.lang.IllegalStateException: невозможно преобразовать значение типа [java.lang.String] в требуемый тип [Foo]: не найдены подходящие редакторы или стратегия преобразования - person user973479; 09.11.2011
comment
Это работает из коробки с примитивными типами. Для пользовательских классов вам необходимо использовать пользовательский биндер с аннотацией @InitBinder, см. пример static.springsource.org/spring/docs/3.0.0.M3/ - person Peter Szanto; 09.11.2011
comment
Спасибо, но, похоже, это не решает проблему, если и Foo, и Bar передаются как строки. Кажется, что лучший способ — взять int в качестве параметра запроса и использовать службу dao для получения объекта dao. - person user973479; 09.11.2011
comment
в HTTP-запросе параметры всегда отправляются в виде строки. Если вы используете пользовательский объект, вам нужно использовать связующее, которое сообщает Spring, как преобразовать строку в ваш объект. - person Peter Szanto; 10.11.2011