spring-mvc - Spring MVC : Session attribute required - not found in session

标签 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 包含以下内容:

@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”对象……我该如何实现?

谢谢

最佳答案

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

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

关于spring-mvc - Spring MVC : Session attribute required - not found in session,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8947612/

相关文章:

spring - 使用Spring Boot和Kotlin无法提供动态Web内容

java - 使用@extends时空白节奏输出

spring - POST 方法读取查询参数而不是表单字段

java - hibernate中子对象列表的条件查询

java - Spring:如何将 String bean 注入(inject)构造函数?

java - 错误 400——错误请求

java - GroovyTemplate作为SpringMVC的 View 技术,可以创建JSON吗?

java - 如何在 spring 配置中创建 javax.mail.Session

java - Spring Test 在 Spring Boot 中测试 Rest API 时返回 404 而不是 200

java - 当在数据库中的表之间添加新映射时,出现错误: Injection of autowired dependencies failed