У меня есть страница, которая представляет некоторые данные. Подзаголованные поля содержат параметр ID.
<form:form modelAttribute="command" action="info.html">
<form:input path="id"/>
...
</form:form>
Мой командный объект - это POJO с таким полем id
:
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
. Например, боб вроде:
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()
}
Почему это и как я могу это остановить?
Я хочу, чтобы только моя команда была связана с данными, представленными в запросе, а не с каждой моделью, которая имеет имена свойств, совпадающие с тем, что содержится в запросе.