我有一个提交一些数据的页面。提交的字段包含一个 ID 参数。
<form:form modelAttribute="command" action="info.html">
<form:input path="id"/>
...
</form:form>
我的命令对象是具有这样一个id
字段的 POJO:
public class MyCommand {
private Integer id;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
....
}
这在控制器中注释如下:
@ModelAttribute("command")
public MyCommand initializeCommand() {
return new MyCommand(...);
}
虽然我的处理程序方法看起来像这样:
public void handle(@ModelAttribute("command") MyCommand cmd, ...)
当我提交表单时,Spring 将参数绑定到命令对象。但它还将参数绑定到模型中找到的每个具有属性的对象(到所有模型属性)id
。例如,像这样的bean:
public class FooBar {
private Integer id;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
....
}
设置如下:
@ModelAttribute("fooBar")
public FooBar initializeFooBar() {
return new FooBar(...);
}
在我修改如下的处理程序方法中时,绑定发生在两个模型属性(cmd
和fooBar
)上:
public void handle(@ModelAttribute("command") MyCommand cmd,
@ModelAttribute("fooBar") FooBar fooBar, ...) {
// when i submit my form the following values are equal:
// fooBar.getId() is the same as cmd.getId()
}
为什么会这样,我该如何阻止它?
我只希望我的命令与请求提交的数据绑定,而不是每个具有与请求中的内容匹配的属性名称的模型。