2015-07-10 110 views
2

我是Spring的新手,所以請原諒我,如果我的問題似乎愚蠢。Spring註釋@SessionAttributes是如何工作的

我無法獲得@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 

請注意,我試圖檢索從屬性請求,會話和來自請求的請求(可能是多餘的)

謝謝

+0

你在你的代碼,比如'ModelAndView的任何地方設置myAttribute'的'值。 addObject(「myAttribute」,「hello」);'? – Arpit

+0

不,我不是,但我認爲ModelAttribute方法createMySessionAttribute是這樣做的 – martind

+0

不,它不是。看看它解釋了一個很好的例子:http://fruzenshtein.com/spring-mvc-session/ – Arpit

回答

0

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

如果你想使用的myAttribute值在doSomething方法,這樣做:

/* 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 annotation, when to use it?