2010-05-18 2 views
4

У меня есть контроллер пружины, определенный как это:Как данные весны переносят данные в POJO?

@Controller 
@RequestMapping("/user") 
class UserController { 
    ... 
    @RequestMapping(method=RequestMethod.POST) 
    public String save(User user) { 
     // Do something with user 
     return "redirect:/..."; 
    } 
} 

Как разместить данные (данные, представленные в форме), отображенный на объект пользователя в этом случае? Есть ли какая-либо документация о том, как это работает?

Что произойдет, если у меня есть два POJO?

@Controller 
@RequestMapping("/user") 
class UserController { 
    ... 
    @RequestMapping(method=RequestMethod.POST) 
    public String save(User user, Foo anotherPojo) { 
     // Do something with user 
     return "redirect:/..."; 
    } 
} 

ответ

2

В первом случае, Spring MVC будет пытаться соответствовать именам параметров HTTP POST к именам свойств в User класса, преобразование типов этих значений параметров по мере необходимости.

Во втором случае, я считаю, что Spring будет генерировать исключение, так как оно принимает только один объект Command.

+0

Как насчет параметров сообщений, которые не соответствуют свойству в 'User'? Будут ли они просто проигнорированы? Могут ли они быть захвачены с помощью '@RequestParam (« type ») type'? –

+0

@Richard: они будут игнорироваться, да, и вы можете смешивать и сопоставлять объекты команд, такие как User with @RequestParam, в любой комбинации, которую вы хотите – skaffman

2

Во многих случаях этого должно быть достаточно, если имена параметров POST совпадают с именами атрибутов POJO. Правильный путь, хотя это использовать Spring form taglib и привязать его к POJO:

@Controller 
@RequestMapping("/user") 
class UserController { 
    ... 

    @RequestMapping(value="/login", method=RequestMethod.GET) 
    public ModelAndView get() { 
     return new ModelAndView().addObject("formBackingObject", new User()); 
    } 

    @RequestMapping(value="/login", method=RequestMethod.POST) 
    public String save(User user) { 
     // Do something with user 
     return "redirect:/..."; 
    } 
} 

И тогда в вашей JSP:

// e.g in user/login.jsp 
<form:form method="post" commandName="formBackingObject" action="/user/login.html"> 
    <form:label path="username"><spring:message code="label.username" /></form:label> 
    <form:input path="username" cssErrorClass="error" /> 
    <form:label path="password"><spring:message code="label.password" /></form:label> 
    <form:password path="password" cssErrorClass="error" /> 
    <p><input class="button" type="submit" value="<spring:message code="label.login" />"/></p> 
</form:form> 

Вы можете вкладывать свои атрибуты (например, address.street если ваш пользователь имеет свойство address), я не думаю, что Spring примет более одного объекта команды.

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