Автоматическое связывание параметров запроса похоже на поведение по умолчанию, но я не могу найти много документации по нему.Вот мой пример:
<form:form modelAttribute="test" action="testsubmit.do" method="POST">
Name: <form:input path="name" />
Nested Name: <form:input path="test.nestedName"/>
<input type="submit"/>
public class Test {
public String name;
public String name2;
public TestNested test;
...
public class TestNested {
public String nestedName;
...
Теперь с моим отображением:
@RequestMapping(value = "/testsubmit")
public String testSubmit(Test test){
...
test
Объект связывает значения формы, включая вложенное значение.Это кажется мне ожидаемым, но меня немного смущает аннотация @ModelAttribute
и ее использование по отношению к объектам, указанным в качестве параметров метода сопоставления.
15.3.2.8 Предоставление ссылки на данныеиз модели с @ModelAttribute
говорит:
Когда вы помещаете его в параметр метода, @ModelAttribute
отображает атрибут модели в конкретный аннотированный параметр метода (см. processSubmit()
метод ниже).Вот как контроллер получает ссылку на объект, содержащий данные, введенные в форму.
Когда я связываю объект test
с формой при загрузке, я устанавливаю значение name2
.
@RequestMapping(value = "/test")
public String test(Model model) {
Test test = new Test();
test.setName2("test name2");
model.addAttribute("test", test);
return "test";
}
Это не проходит через метод submit
, когда я аннотирую параметр test
с помощью @ModelAttribute("test")
:
@RequestMapping(value = "/testsubmit")
public String testSubmit(@ModelAttribute("test") Test test) {
...
Это ожидается от меняпоскольку name2
не был указан в качестве поля формы / параметра запроса, но это не помогает мне понять смысл использования @ModelAttribute("test")
.Кто-нибудь может пролить свет на это для меня?