Spring如何将表单值绑定到类变量中?

时间:2016-11-28 21:15:04

标签: spring spring-mvc

如果我在Spring中使用form:form对象,我可以使用commandName让Spring注入类变量值。

但是,我想知道,控制器如何捕获这个值?

@RequestMapping(method = RequestMethod.POST, value = "/form")
public String postForm(@ModelAttribute("item") Item item, ModelMap model)
{
    return "result";
}

在上面的代码中,注入了Item。但是,即使更改此变量的名称(或删除modelattribute),也不会影响此变量是否使用表单值注入。

Spring会从表单中注入第一个找到的模型类中的值吗? Spring如何知道必须将表单注入Item item参数?

起初我以为控制器(POST)中的变量应该具有表单的commandName名称,但它也可以与其他名称一起使用,奇怪的是。

1 个答案:

答案 0 :(得分:1)

Spring文档中有一个专门的部分描述the usage of @ModelAttribute on method arguments

此过程在提交时称为数据绑定,并遵循一些约定:

  1. 如果@ModelAttribute明确声明在参数(您的情况)上的名称。在这种情况下,表单的提交数据将以此名称自动复制。您可以通过调用/检查ModelMap来检查自己model.get("item")模型中是否已存在。
  2. 如果根本没有@ModelAttribute参数注释,则假定属性名称from the type基本上在您的案例类型Item中转换为属性名称item(camelCase表示法) )为您创建一个包含表单数据绑定字段的新项目。这也存在于ModelMap中(与上面相同的检查:model.get(“item”))
  3. 要实现的关键点是在所有这些情况下,DataBinding在点击你的帖子表单RequestMapping之前发生