@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方法的参数添加时没有任何数据绑定发生。

链接地址: http://www.djcxy.com/p/92549.html

上一篇: Data binding of @ModelAttribute annotated parameters

下一篇: how to retrieve NV21 data from DJI camera Phantom 3 Professional drone