如果我在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名称,但它也可以与其他名称一起使用,奇怪的是。
答案 0 :(得分:1)
Spring文档中有一个专门的部分描述the usage of @ModelAttribute on method arguments。
此过程在提交时称为数据绑定,并遵循一些约定:
@ModelAttribute
明确声明在参数(您的情况)上的名称。在这种情况下,表单的提交数据将以此名称自动复制。您可以通过调用/检查ModelMap
来检查自己model.get("item")
模型中是否已存在。@ModelAttribute
参数注释,则假定属性名称from the type
基本上在您的案例类型Item
中转换为属性名称item
(camelCase表示法) )为您创建一个包含表单数据绑定字段的新项目。这也存在于ModelMap中(与上面相同的检查:model.get(“item”))要实现的关键点是在所有这些情况下,DataBinding在点击你的帖子表单RequestMapping之前发生。