如何使用Spring MVC从我的表单中填充两个bean?

时间:2012-09-13 19:06:07

标签: java spring-mvc webforms javabeans

所以我使用Spring MVC 3注释。

我有一个简单的html表单(实际上是ExtJS),它有三个字段。

1) Username
2) Password
3) Color

好的,usernamepassword属于名为User的数据库。 color属于另一个名为Color的bean。

在我的UserController中,我有:

@RequestMapping(value = "/users/login", method = RequestMethod.POST)
@ResponseBody
  public String handleLogin(  @ModelAttribute("user") User paUser, 
                              @ModelAttribute("color") Color paColor, 
                              ModelMap map) {

    // at this point "paUser" contains both username AND password submitted from form

    // however, there is nothing in "paColor"

    ...

    return "user.jsp"
}   

我做错了什么?

我是春天的新手,顺便说一句。

由于

1 个答案:

答案 0 :(得分:5)

通常,您将创建一个表示表单的新类(这称为表单支持对象),例如UserColorForm,其中包含请求正文中每个输入的属性。

您的控制器方法将如下所示:

@RequestMapping(value = "/users/login", method = RequestMethod.POST)
@ResponseBody
public String handleLogin(UserColorForm form, ModelMap map) {
    // now you can work with form.getUsername(), form.getColor() etc.

如果FBO bean具有与表单输入名称匹配的属性名称,则Spring会将请求中的输入直接绑定到属性。即如果表单输入为username=matt&color=blue,则Spring将创建表单的新实例,并调用setUsername("matt")setColor("blue")

顺便说一句,如果要从方法(@ResponseBody)返回视图的名称,您可能不希望使用user.jsp注释该方法。 @ResponseBody表示方法的返回值应直接写入响应流。