2017-10-06 65 views
0

我在這裏看到很多關於會話屬性刪除的問題,這很好,但它不是我想要的。也許我誤解了這一點。Spring MVC會話刪除多個請求屬性

問題: 我通過一個會話發送兩個ajax請求。 當我發送第一個Ajax請求「RequestA」時,我的屬性「AtributeA」將被刪除。我看到,在hattpSession中它不再被列出。 當我發送第二個Ajax請求「RequestB」給其他一些處理程序時,我仍然看到我的屬性「AtributeA」。即使這個對象的散列值與「RequestA」中的相同。也許我做錯了什麼或者這是正常的行爲?

我的代碼由第一AJAX請求與Requestmapping: 「routeA」:

@Controller 
@SessionAttributes({"ObjectAA"}){ 
     @RequestMapping("/routeA") 
     public handlerAA(HttpSession session){ 
       session.removeAttribute("ObjektAA"); //Attribute will be deleted as expected 
     } 

     @RequestMapping("/routeB") 
     public handlerBB(HttpSession session){ 
       session.getAttribute("ObjektAA"); 
     } 
} 

我的代碼由第二AJAX請求與Requestmapping: 「routeB」:

@Controller 
@SessionAttributes({"ObjectAA"}){ 
     @RequestMapping("/routeA") 
     public handlerAA(HttpSession session){ 
       session.removeAttribute("ObjectAA"); 
     } 


     @RequestMapping("/routeB") 
     public handlerBB(HttpSession session){ 
       session.getAttribute("ObjectAA"); //ObjectAA is still in the session? how could it be? 
     } 
} 

回答

1

檢查這個春天文件,它會清除你的問題。

org.springframework.web.bind.annotation.SessionAttributes

註釋指出會話屬性是特定的處理器使用。 這通常會列出模型屬性的名稱,這些屬性應該透明地存儲在 會話或某些會話存儲中,作爲表單支持bean。在類型級聲明, 應用於註釋處理程序類操作的模型屬性。 注意:使用此註釋表示的會話屬性對應於特定處理程序的模型 屬性,透明地存儲在會話會話中。一旦處理程序指示其會話會話完成,將刪除那些屬性爲 。因此,使用這個 工具來處理這樣的會話屬性,這些屬性在特定處理程序的對話過程中應該臨時存儲在會話中 。 對於永久會話屬性,例如一個用戶認證對象,改用傳統的 session.setAttribute方法。或者,考慮使用泛型org.springframework.web.context.request.WebRequest接口的屬性管理 功能。 注意:當使用控制器接口(例如,用於AOP代理),確保始終如一地把所有 你映射的註釋—如@RequestMapping和 控制器接口,而不是實現類@SessionAttributes —。 因爲: 2.5 作者: 克林斯曼Hoeller 山姆Brannen

如果你發現它有助於將其標記爲有幫助的。 #happycoding

+0

好吧,這意味着,這是正常的行爲,只有在特定的處理程序,而不是整個瀏覽器會話,直到瀏覽器關閉或我已註銷,屬性將被刪除。 –

+0

是的,這是正常的行爲 –

+0

HHMM ....我只是看到這個文件,我現在很困惑:在HTTP會話** 使用@SessionAttributes存儲模型屬性**請求 之間的https://文檔。 spring.io/spring/docs/3.2。x/spring-framework-reference/html/mvc.html#mvc-ann-sessionattrib 那就是我需要的,取消不同的請求來檢索我的sesstion-attribute。 –