Ссылка на Spring 3 учит нас:
Когда вы помещаете его в параметр метода, @ModelAttribute
отображает атрибут модели в конкретный аннотированный параметр метода
Я не понимаю это магическое заклинание, потому что я уверен, что псевдоним объекта модели (значение ключа, если используется ModelMap
в качестве возвращаемого типа) передан в View после выполнения метода обработчика запроса.Поэтому, когда метод обработчика запросов выполняет, имя объекта модели не может быть сопоставлено с параметром метода.
Чтобы разрешить это противоречие, я пошел к stackoverflow и нашел этот подробный пример.Автор примера сказал:
// Модель "personAttribute" была передана в контроллер из JSP
Кажется, он очарован ссылками Spring...
Чтобы рассеять прелести, я развернул его пример приложения в своей среде и жестоко вырезал аннотацию @ModelAttribute из метода MainController.saveEdit()
.В результате приложение работает без каких-либо изменений!Итак, я делаю вывод: аннотация @ModelAttribute
не требуется для передачи значений полей веб-формы в поля аргумента.Тогда я остановился на вопросе: что означает аннотация @ModelAttribute
?Если единственным способом является установка псевдонима для объекта модели в View, то почему этот способ лучше, чем явное добавление объекта в ModelMap
?