@SessionAttributes在什麼確切的情況下被清除?嘗試在頁面中使用兩個模型時,我發現了一些令人困惑的行爲。什麼時候SpringMVC中的@SessionAttributes被刪除? (With code sample)
當我做一個使用該控制器GET後跟一個POST ...
@Controller
@RequestMapping("/myPage*")
@SessionAttributes(value = {"object1", "object2"})
public class MyController {
@RequestMapping(method = RequestMethod.GET)
public String get(Model model) {
model.addAttribute("object1", new Object1());
model.addAttribute("object2", new Object2());
return "myPage";
}
@RequestMapping(method = RequestMethod.POST)
public String post(@ModelAttribute(value = "object1") Object1 object1) {
//do something with object1
return "myPage";
}
}
...對象2會從模型清除。它不再作爲@SessionAttribute存在,並且無法在我的視圖頁面上訪問。
但是,如果第二個方法的簽名修改成這樣...
public String post(@ModelAttribute(value = "object1") Object1 object1,
@ModelAttribute(value = "object2") Object2 object2) {
...那麼對象2不會被從模型中清除,可我的視圖頁面上。
爲@SessionAttributes的Javadoc說:
...屬性將被刪除,一旦 處理程序指示 了對話會議的完成。
但我不明白我是如何表示第一個例子中會話會話的完成,但在第二個例子中沒有。
任何人都可以解釋這種行爲還是一個錯誤?
這個問題現在已經在Spring 3.0RC1解決。見http://jira.springsource.org/browse/SPR-6084謝謝Juergen! – 2009-09-25 08:15:16