我有一个Spring 2.5带注释的控制器,其中我有一个用@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....
}
答案 0 :(得分:3)
允许@ModelAttribute
的方法具有@RequestMapping
支持的任何参数,例如,您可以根据需要添加多少@RequestParam
个参数来填充命令对象,或者甚至http请求本身。我不确定您是否可以以相同的方式获取数据绑定器的实例。
再次阅读文档我认为这个想法是@ModelAttribute
方法中的预填充将是数据库驱动的,这可能是为什么没有添加@ModelAttribute
没有任何数据绑定发生的原因作为@RequestMapping
方法的参数。