Spring MVC: атрибут сессии требуется - не найден в сессии - PullRequest
2 голосов
/ 21 января 2012

При отправке формы я получаю следующую ошибку:

org.springframework.web.HttpSessionRequiredException: Session attribute 'rulesForm' required - not found in session
at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter$ServletHandlerMethodInvoker.raiseSessionRequiredException(AnnotationMethodHandlerAdapter.java:722)

Мой JSP содержит следующее:

<form:form id="rulesForm" modelAttribute="rulesForm" action="save.do">
...
</form>

Мой контроллер содержит следующее:

@Controller
@RequestMapping("/rules")
@SessionAttributes({"rulesForm", "deskForm"})
public class RulesController {
.
.
.
@RequestMapping(value = "/save.do")
public ModelAndView saveRuleAttributesAndRules(@Valid 
    @ModelAttribute("rulesForm")
    RulesFormDTO rulesForm, BindingResult bindingResult, HttpSession session, Principal principal) {

Похоже, что если я некоторое время оставляю свой браузер открытым с отображением формы, а затем через некоторое время пытаюсь выполнить отправку, я получаю эту ошибку.

Действительно, что я хочу, чтобы произошло в этом случаедля создания нового объекта "rulesForm" ... как мне этого добиться?

Спасибо

1 Ответ

5 голосов
/ 25 января 2012

Поскольку Javadoc в @SessionAttribute указывает, что использование аннотации означает, что вы хотите сохранить указанные атрибуты модели в сеансе, что означает, что вам нужно сначала добавить их в модель. Spring MVC не будет их создавать.

Другими словами, когда вы добавляете аргумент метода контроллера @ModelAttribute ("rulesForm"), вы указываете Spring MVC найти его в модели или создать новый экземпляр, если он не найден. Однако если вы также добавите @SessionAttributes, Spring MVC не будет пытаться создать новый экземпляр и будет ожидать, что объект будет находиться либо в модели, либо в сеансе. Вы можете использовать метод @ModelAttribute для первоначального добавления вашего объекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...