Java Spring注解@SessionAttributes是如何工作的

Java Spring注解@SessionAttributes是如何工作的,java,spring,spring-mvc,Java,Spring,Spring Mvc,我是春天的新手,所以如果我的问题看起来很愚蠢,请原谅我 我无法让@SessionAttributes(以及@ModelAttribute)在我的Spring控制器中工作。我做错了什么?这是代码 @Controller @SessionAttributes("myAttribute") public class MyController { @ModelAttribute("myAttribute") public String createMySessionAttribute() {

我是春天的新手,所以如果我的问题看起来很愚蠢,请原谅我

我无法让@SessionAttributes(以及@ModelAttribute)在我的Spring控制器中工作。我做错了什么?这是代码

@Controller
@SessionAttributes("myAttribute")
public class MyController {

@ModelAttribute("myAttribute")
public String createMySessionAttribute() {
    System.out.println("Inside of createMySessionAttribute");
    return new String("mySessionAttribute");
}

//......

@RequestMapping("/doSomething.do")
public ModelAndView doSomething(HttpSession session, HttpServletRequest request) {

    String sessionAttribute = (String)session.getAttribute("myAttribute");
    String requestAttribute = (String)request.getAttribute("myAttribute");
    String requestSessionAttribute = (String)request.getSession().getAttribute("myAttribute");

    System.out.println(" sessionAttribute = " + sessionAttribute
            + "; requestAttribute = " + requestAttribute
            + "; requestSessionAttribute = " + requestSessionAttribute 
            );


    ModelAndView modelAndView = new ModelAndView("nextPage");

    return modelAndView;
}
}
这是输出

Inside of createMySessionAttribute
sessionAttribute = null; requestAttribute = null; requestSessionAttribute = null 
我以为

Inside of createMySessionAttribute
sessionAttribute = mySessionAttribute; requestAttribute = mySessionAttribute; requestSessionAttribute = mySessionAttribute
请注意,我试图从请求中检索属性、会话,并从请求中检索seision(这可能是多余的)


谢谢

在请求结束之前,它不会将值放入会话

如果要在
doSomething
方法中使用
myAttribute
的值,请执行以下操作:

/* It should have been called @WriteModelAttribute when used like this */
@ModelAttribute("myAttribute")
String writeModelAttribute() {
    return "myAttribute value";
}

/* It should have been called @ReadModelAttribute when used like this */
ModelAndView doSomething(@ModelAttribute("myAttribute") String myAttribute) {
   System.out.println(myAttribute);  //=myAttribute value
   ...
}

请参见

是否在代码中的任何位置设置
myAttribute
的值,如
modelAndView.addObject(“myAttribute”、“hello”)?不,我不是,但我假设ModelAttribute方法createMySessionAttribute正在这样做不,不是。看一看,它用一个很好的例子来解释:好吧,我想我误解了@modeldattribute注释的工作原理。我看你的例子根本没有用