Как весенняя карта отправляет данные в POJO? - PullRequest
4 голосов
/ 18 мая 2010

У меня есть пружинный контроллер, определенный следующим образом:

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

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

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

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

Ответы [ 2 ]

2 голосов
/ 18 мая 2010

Во многих случаях должно быть достаточно, если имена параметров POST совпадают с именами атрибутов POJO. Однако, правильный способ - использовать taglib формы Spring и связать его с вашим 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 примет более одного объекта команды.

2 голосов
/ 18 мая 2010

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

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

...