Как я могу сделать так, чтобы @SessionAttributes
были привязаны к соответствующим контроллерам, или очистить @SessionAttributes
при преждевременном переключении рабочих процессов между контроллерами?
Пример:
Пользователь идетна веб-страницу для редактирования словаря и входит в DictionaryController.java
, который создает DictionaryForm.java
объект и сохраняет его в @SessionAttributes
в «форме»
Обычно запись словаря выбирается в запросе GET, затем обновляетсяна POST и status.setComplete()
вызывается при успехе;
Однако, если пользователь выполняет запрос GET, он щелкает на другой странице, такой как OrganizationController.java
, появляется второй контроллер, пытающийся повторно использовать «форму» @SessionAttribute
объект от другого контроллера и потерпит неудачу прежде, чем он достигнет метода getOrganization()
.(Характер того, как именно происходит сбой, не определен, так как моя консоль затмения не выводит никаких исключений, но я подозреваю, что это потому, что типы форм не совпадают)
@SessionAttributes("form")
public class DictionaryController {
@ModelAttribute("form")
public DictionaryForm initForm() {
return new DictionaryForm();
}
@RequestMapping(value="/Dictionary" method=RequestMethod.GET)
public String getDictionary(
@ModelAttribute("form") DictionaryForm form) {
...
return "dictionaryView";
}
@RequestMapping(value="/Dictionary" method=RequestMethod.POST)
public String updateDictionary(
@ModelAttribute("form") DictionaryForm form,
SessionStatus status) {
...
status.setComplete();
return "successView";
}
}
@Controller
@SessionAttributes("form")
public class OrganizationController{
@ModelAttribute("form")
public OrganizationForm initForm() {
return new OrganizationForm();
}
@RequestMapping(value="/Organization" method=RequestMethod.GET)
public String getOrganization(
@ModelAttribute("form") OrganizationForm form) {
...
return "orgView";
}
@RequestMapping(value="/Organization" method=RequestMethod.POST)
public String updateOrganization(
@ModelAttribute("form") OrganizationForm form,
SessionStatus status) {
...
status.setComplete();
return "successView";
}
}