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

cbm*_*eks 4 java webforms spring-mvc javabeans

所以我使用带注释的Spring MVC 3.

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

1) Username
2) Password
3) Color
Run Code Online (Sandbox Code Playgroud)

好了,username并且password属于一个名为公司Databeans User. color属于另一个叫做的bean Color.

在我的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"
}   
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

我是春天的新手,顺便说一下.

谢谢

mat*_*t b 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.
Run Code Online (Sandbox Code Playgroud)

如果FBO bean具有与表单输入名称匹配的属性名称,则Spring会将请求中的输入直接绑定到属性.也就是说,如果表单输入是username=matt&color=blueSpring会创造我的窗体的新实例,并调用setUsername("matt")setColor("blue").

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