Я пытаюсь использовать объект в качестве командного объекта элемента <%@ taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
.
В методе GET контроллера я добавляю объект следующим образом:
@RequestMapping(method = RequestMethod.GET)
public String renderForm(ModelMap model, HttpServletRequest request) {
[...]
model.addAttribute("voting", voting);
[...]
}
В визуализированной форме объект команды отображается правильно, если он определен следующим образом:
<form:form action="vote" method="PUT" commandName="voting" name="oform">
Теперь, когда я пытаюсь получить доступ к объекту команды формы обратно в контроллере, в методе POST у меня есть два подхода. Сначала я объявляю @ModelAttribute в подписи:
@RequestMapping(method = RequestMethod.PUT)
public String newVoting(@ModelAttribute("voting") Voting voting, HttpServletRequest request) { [...]}
Или я получаю доступ к ModelMap и получаю значение из базовой карты:
@RequestMapping(method = RequestMethod.PUT)
public String newVoting(ModelMap model, HttpServletRequest request) {
Voting voting = (Voting) model.get("voting");
[...]
}
При выполнении первого я получаю объект так, как он был представлен формой. Делая последнее, я получаю объект таким, каким он был ДО обработки формы.
Почему отправка формы не меняет объект в ModelMap и почему @ModelAttribute отличается от того, что в реальной модели? Мне кажется, что имя «ModelAttribute» должно приводить к тому же объекту, что и получение объекта непосредственно из модели.
Может быть, @ModelAttribute вводит в заблуждение?
EDIT
Забыл упомянуть, что это объект @ SessionAttributes
@SessionAttributes({"voting", "state"})