Я использую 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 и атрибуты сеанса
Некоторые вопросы относительно этого ответа:
Код запрашивающего и код выбранного ответа выглядят практически одинаково ... так где же дополнение, которое решило проблему?
Пытаясь прочитать документацию , я не могу понять, что на самом деле делает эта аннотация:
Когда соответствующий объект команды сохраняется в сеансе? Это когда мы входим в метод контроллера, или когда мы покидаем его, или каждый раз, когда мы манипулируем содержимым объекта команды ....? Когда объект команды начинает сохраняться в сеансе?
Спасибо!