Spring MVC:需要会话属性 - 在会话中找不到

时间:2012-01-20 20:42:28

标签: spring-mvc

我在提交表单时收到以下错误:

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 个答案:

答案 0 :(得分:5)

由于@SessionAttribute上的Javadoc表示使用注释意味着您希望在会话中存储指定的模型属性,这意味着您需要首先将它们添加到模型中。 Spring MVC不会创建它们。

换句话说,当您添加@ModelAttribute(“rulesForm”)控制器方法参数时,您告诉Spring MVC在模型中查找它,或者如果找不到则创建新实例。但是,如果您还添加@SessionAttributes,Spring MVC将不会尝试创建新实例,并且期望该对象位于模型中或会话中。您可以使用@ModelAttribute方法最初添加对象。