Spring @ModelAttribute绑定

时间:2016-04-14 08:22:34

标签: spring forms spring-mvc binding modelattribute

我想确定我是否已理解@ModelAttribute注释权的性质。这是一个例子。

@Controller
public class GreetController {

    @ModelAttribute("userInfoFormObject")
    public UserInfoForm modelFormObject() {
        return new UserInfoForm();
    }

    @RequestMapping(value = "form", method = RequestMethod.GET)
    public String showForm() {
        return "form";
    }

    @RequestMapping(value = "processform", method = RequestMethod.POST)
    public String processForm() {
        return "greet";
    }

}

当用户导航到表单时,Spring会实例化新的UserInfoForm并将其添加到model。视图模板提取字段名称并打印表单。当用户提交表单并点击processForm()时,Spring会再次实例化UserInfoForm,将其添加到model,这次populates it with the POST parameters

因此,在使用@RequestParamform model objects注释时,我从不需要@ModelAttribute或手动绑定 - 它总是尽可能多地完成工作,并且基本上可以实现不同的目的在具有不同有效负载的不同请求上,在绑定时绑定原则,但总是实例化并添加到模型中。

我是否理解@ModelAttribute权利,并且这个用例是否正确呢?

修改

实际上,@ModelAttribute过程似乎不会自动绑定属性,如果它只是返回一个新的Object。但是,如果我@ModelAttribute方法参数中要求一个对象,Spring会将属性绑定到该对象,就像在普通的处理程序方法中一样。然后,这只是返回该对象的问题。这是有道理的,因为@ModelAttribute带注释的方法将接受请求处理程序所做的任何事情。但是,在我看来,这有点违反直觉。

所以这是实际工作的代码片段

@ModelAttribute("userInfoFormObject")
public UserInfoForm modelFormObject(UserInfoForm formObject) {
    return formObject;
}

0 个答案:

没有答案