【发布时间】:2011-09-04 02:55:01
【问题描述】:
我正在使用 Spring MVC 3.0.5。我正在尝试学习如何使用@SessionAttributes。这是我的代码示例:
@Controller
@SessionAttributes("book")
public class BookController {
@RequestMapping("/book/bookForm.htm")
public ModelAndView showForm(HttpServletRequest request, HttpServletResponse response, @Valid @ModelAttribute("book") Book book, BindingResult result) throws Exception {
ModelMap modelMap = new ModelMap();
return new ModelAndView("bookForm", modelMap);
}
}
当我尝试转到 /book/bookForm.htm 时出现异常:
org.springframework.web.HttpSessionRequiredException: Session attribute 'book' required - not found in session
org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter$ServletHandlerMethodInvoker.raiseSessionRequiredException(AnnotationMethodHandlerAdapter.java:722)
org.springframework.web.bind.annotation.support.HandlerMethodInvoker.resolveModelAttribute(HandlerMethodInvoker.java:758)
org.springframework.web.bind.annotation.support.HandlerMethodInvoker.resolveHandlerArguments(HandlerMethodInvoker.java:356)
org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:171)
org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:426)
org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:414)
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:790)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719)
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644)
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:549)
javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
我该如何解决这个问题?
我也尝试过这个答案:
Spring Framework 3 and session attributes
关于该答案的一些问题:
提问者的代码和选择的答案的代码看起来基本相同……那么解决问题的补充在哪里?
试图阅读documentation,我无法理解这个注释实际上做了什么:
相关命令对象何时保存在会话中?是在我们进入控制器的方法时,还是在离开时,还是每次操作命令对象的内容时......?命令对象何时开始保存在会话中?
谢谢!
【问题讨论】:
-
你找到答案了吗?我也面临同样的问题
标签: java spring spring-mvc annotations