4

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

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

1) Username
2) Password
3) Color

好的,所以username属于password一个名为User. color属于另一个名为Color.

在我的用户控制器中,我有:

@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"
}   

我究竟做错了什么?

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

谢谢

4

1 回答 1

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=blueSpring 将创建我的表单的一个新实例并调用setUsername("matt")and setColor("blue")

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

于 2012-09-13T19:10:16.037 回答