我在提交表单时收到以下错误:
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”对象......我怎样才能实现这个目标?
由于
答案 0 :(得分:5)
由于@SessionAttribute上的Javadoc表示使用注释意味着您希望在会话中存储指定的模型属性,这意味着您需要首先将它们添加到模型中。 Spring MVC不会创建它们。
换句话说,当您添加@ModelAttribute(“rulesForm”)控制器方法参数时,您告诉Spring MVC在模型中查找它,或者如果找不到则创建新实例。但是,如果您还添加@SessionAttributes,Spring MVC将不会尝试创建新实例,并且期望该对象位于模型中或会话中。您可以使用@ModelAttribute方法最初添加对象。