@ModelAttribute注释参数的数据绑定
我有一个Spring 2.5注释的Controller,其中有一个用@RequestMapping(method = RequestMethod.GET)注解的方法,它执行一些逻辑来填充模型。
我也有一个用@RequestMapping(method = RequestMethod.POST)注解的方法来执行请求。 这个方法有一个@ModelAttribute注释参数,它包含我自己的表单pojo,我们称之为MyForm。 我也有一个MyForm的初始化方法,也用@ModelAttrribute注解。 到目前为止,所有的工作都如预期的那样:在POST请求上,表单数据绑定到MyForm,我可以处理它。
问题是我希望能够通过传入(GET)请求参数来预填充表单。 由于我有MyForm的@ModelAttribute方法,我在我的模型中得到了一个MyForm实例,但它不会被填充,除非我专门将它用作GET方法的参数。
为什么我必须这样做,是否可以以不同的方式强制我的表单上的数据绑定GET请求? 我现在只是传入参数,但因为它已经在模型中,我不必对它做任何事情,导致一个丑陋的未使用的方法参数。
[编辑:一些代码示例来说明]
未在get请求上填充表单的控制器:
@Controller
public class MyController {
@ModelAttribute("myForm")
public MyForm createForm() {
return new MyForm();
}
@RequestMapping(method=RequestMethod.GET)
public void handlePage(Model model) {
//Do some stuff to populate the model....
}
@RequestMapping(method=RequestMethod.POST)
public void processForm(@ModelAttribute("myForm") MyForm myForm) {
//Process the form
}
}
当我更改handlePage方法的方法签名时,它将填充到get请求中。
@RequestMapping(method=RequestMethod.GET)
public void handlePage(Model model, @ModelAttribute("myForm") MyForm myForm) {
//Do some stuff to populate the model....
}
使用@ModelAttribute
的方法允许有任何@RequestMapping
支持的参数,例如,您可以根据需要添加多少@RequestParam
参数来填充您的命令对象,甚至可以添加http请求本身。 我不确定是否可以用同样的方式获取数据联编程序的实例。
再次阅读文档我认为这个想法是@ModelAttribute
方法中的预填充会被数据库驱动,这可能是为什么没有将@ModelAttribute
作为@RequestMapping
方法的参数添加时没有任何数据绑定发生。
上一篇: Data binding of @ModelAttribute annotated parameters
下一篇: how to retrieve NV21 data from DJI camera Phantom 3 Professional drone