簡體   English   中英

Spring注解@SessionAttributes如何工作

[英]How does Spring annotation @SessionAttributes work

我是Spring的新手,所以如果我的問題很愚蠢,請原諒我。

我無法在我的Spring控制器中使用@SessionAttributes(以及@ModelAttribute)。 我究竟做錯了什么? 這是代碼...

@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

請注意,我嘗試從請求,會話和請求的引用中檢索屬性(這可能是多余的)

謝謝

直到請求結束,它才會將值放入會話中。

如果要在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
   ...
}

請參見@ModelAttribute批注,何時使用?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM