2010-02-05 3 views
4

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

например:

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

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

Есть ли способ, чтобы это произошло автоматически с использованием Spring MVC, и если да, то как это сделать?

ответ

3

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

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

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

... (@ModelAttrbiute("u") User u) ... 
+0

Я просматривал образец образца для домашних животных Spring 3.0. В их образце у них есть отдельный объект, называемый 'UserForm' в качестве параметра метода. Вы знаете, почему они отделяют это так? – Kyle

+0

@Spines: может быть полезно, когда структура вашего объекта формы отличается от объектов вашей модели данных – axtavt

0

В сервлетах нет, но весной MVC абсолютно. Взгляните на документы web framework.

В частности, Section 13.11.4, 9-й пункт маркировки.

+0

Как сделать это в Spring MVC? Я просто использовал такие вещи, как '@RequestParam (« name ») String name, @RequestParam (« age ») String age', затем вручную заполняя объект' User'. – Kyle

1

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) есть много вариантов выше. ищите подходящий метод, который соответствует вашим потребностям. Для простого потока вышеуказанный метод должен быть достаточным.

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

commandObj = ((PriceIncrease) command) 

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

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

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

....

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