我想确定我是否已理解@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
。
因此,在使用@RequestParam
和form model objects
注释时,我从不需要@ModelAttribute
或手动绑定 - 它总是尽可能多地完成工作,并且基本上可以实现不同的目的在具有不同有效负载的不同请求上,在绑定时绑定原则,但总是实例化并添加到模型中。
我是否理解@ModelAttribute
权利,并且这个用例是否正确呢?
修改
实际上,@ModelAttribute
过程似乎不会自动绑定属性,如果它只是返回一个新的Object。但是,如果我在@ModelAttribute
方法参数中要求一个对象,Spring会将属性绑定到该对象,就像在普通的处理程序方法中一样。然后,这只是返回该对象的问题。这是有道理的,因为@ModelAttribute
带注释的方法将接受请求处理程序所做的任何事情。但是,在我看来,这有点违反直觉。
所以这是实际工作的代码片段
@ModelAttribute("userInfoFormObject")
public UserInfoForm modelFormObject(UserInfoForm formObject) {
return formObject;
}