Java – Spring MVC – автоматически заполнять объект из отправки формы?

В ASP.NET MVC в контроллере я могу просто сделать объект из моей модели параметром в одном из моих методов, и отправка формы, которая обрабатывается этим методом, автоматически заполнит объект.

eg:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(User u){...}

Пользовательский объект будет автоматически заполнен для отправки формы.

Есть ли способ сделать это автоматически с помощью Spring MVC, и если да, то как мне это сделать?


person Kyle    schedule 05.02.2010    source источник


Ответы (3)


В Spring MVC (с конфигурацией на основе аннотаций Spring MVC 2.5+) это выглядит точно так же:

@RequestMapping(method = RequestMethod.POST)
public ModelAndView edit(User u) { ... }

Объект User будет автоматически заполнен. Вы также можете явно указать имя соответствующего атрибута модели с аннотацией @ModelAttribute (по умолчанию имя атрибута представляет собой имя класса аргумента с первой буквой без заглавных букв, то есть «пользователь»)

... (@ModelAttrbiute("u") User u) ...
person axtavt    schedule 05.02.2010
comment
Я просматривал образец проекта по уходу за домашними животными для Spring 3.0. В их примере у них есть отдельный объект с именем UserForm в качестве параметра метода. Вы знаете, почему они разделяют это так? - person Kyle; 05.02.2010
comment
@Spines: может быть полезно, когда структура вашего объекта формы отличается от объектов вашей модели данных. - person axtavt; 05.02.2010

http://static.springsource.org/spring/docs/2.0.x/api/org/springframework/web/portlet/mvc/SimpleFormController.html#onSubmitAction(java.lang.Object)

Создайте контроллер формы, например PriceIncreaseFormController, и сделайте его расширением SimpleFormController.

переопределить метод public ModelAndView onSubmit(Object command) есть много вариантов вышеперечисленного. ищите правильный метод, который соответствует вашим потребностям. Для простого потока описанного выше метода должно быть достаточно.

Внутри метода вы можете ввести команду и получить свой класс Command.

commandObj = ((PriceIncrease) command)

commandObj будет иметь параметры, заполненные spring.

в вашем springapp-servlet.xml вы должны сообщить Spring о классе команд PriceIncrease следующим образом, а также у вас должен быть создан POJO для вашего класса команд.

<bean name="/priceincrease.htm" class="springapp.web.PriceIncreaseFormController">
    <property name="commandClass" value="springapp.service.PriceIncrease"/>

....

person Joseph Kulandai    schedule 05.02.2010

В сервлетах нет, а вот в Spring MVC абсолютно. Взгляните на веб-фреймворк.

В частности, Раздел 13.11.4, 9-й пункт списка.

person bpapa    schedule 05.02.2010
comment
Как мне это сделать в Spring MVC? Я просто использовал такие вещи, как @RequestParam("name") String name, @RequestParam("age") String age, а затем вручную заполнил объект User. - person Kyle; 05.02.2010