2012-01-20 2 views
2

Я получаю следующее сообщение об ошибке при представлении моей формы:Spring MVC: обязательный атрибут Session - не найден в сессии

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) 

My 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) { 

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

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

Благодаря

ответ

5

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

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

+1

Добавление метода @ModelAttribute не то, что я хочу. Я хочу, чтобы данные, размещенные в форме, были сопоставлены с объектом RulesForm. Как получилось, когда моя форма отправлена, она не выполняет привязку? – DJ180

Смежные вопросы