本文研究的主要是spring學習之@SessionAttributes的相關內容,具體如下。
在默認情況下,ModelMap 中的屬性作用域是request 級別是,也就是說,當本次請求結束後,ModelMap中的屬性將銷毀。如果希望在多個請求中共享ModelMap 中的屬性,必須將其屬性轉存到session 中,這樣ModelMap 的屬性才可以被跨請求訪問。
spring允許我們有選擇地指定ModelMap 中的哪些屬性需要轉存到session 中,以便下一個請求屬對應的ModelMap 的屬性列表中還能訪問到這些屬性。這一功能是通過類定義處標註@SessionAttributes註解來實現的。
使模型對象的特定屬性具有Session 範圍的作用域
package com.baobaotao.web;… import org.springframework.ui.ModelMap;import org.springframework.web.bind.annotation.SessionAttributes;@Controller @RequestMapping("/bbtForum.do") @SessionAttributes("currUser") //①將ModelMap中屬性名為currUser的屬性,放到Session屬性列表中,以便這個屬性可以跨請求訪問public class BbtForumController {… @RequestMapping(params = "method=listBoardTopic") public String listBoardTopic(@RequestParam("id")int topicId, User user, ModelMap model) {bbtForumService.getBoardTopics(topicId);System.out.println("topicId:" + topicId);System.out.println("user:" + user);model.addAttribute("currUser",user);//②向ModelMap中添加一個屬性return "listTopic";}}我們在② 處添加了一個ModelMap 屬性,其屬性名為currUser,而① 處通過@SessionAttributes註解將ModelMap 中名為currUser 的屬性放置到Session 中,所以我們不但可以在listBoardTopic() 請求所對應的JSP 視圖頁面中通過request.getAttribute(“currUser”)和session.getAttribute(“currUser”)獲取user 對象,還可以在下一個請求所對應的JSP 視圖頁面中通過session.getAttribute(“currUser”)或ModelMap#get(“currUser”)訪問到這個屬性。
這裡我們僅將一個ModelMap 的屬性放入Session 中,其實@SessionAttributes允許指定多個屬性。你可以通過字符串數組的方式指定多個屬性,如@SessionAttributes({“attr1”,”attr2”}) 。此外,@SessionAttributes還可以通過屬性類型指定要session 化的ModelMap 屬性,如@SessionAttributes(types = User.class) ,當然也可以指定多個類,如@SessionAttributes(types = {User.class,Dept.class}) ,還可以聯合使用屬性名和屬性類型指定: @SessionAttributes(types = {User.class,Dept.class},value={“attr1”,”attr2”}) 。
我們可以在需要訪問Session 屬性的controller 上加上@SessionAttributes ,然後在action 需要的User 參數上加上@ModelAttribute ,並保證兩者的屬性名稱一致。 SpringMVC 就會自動將@SessionAttributes定義的屬性注入到ModelMap 對象,在setup action 的參數列表時,去ModelMap 中取到這樣的對象,再添加到參數列表。只要我們不去調用SessionStatus 的setComplete()方法,這個對象就會一直保留在Session 中,從而實現Session 信息的共享。
@Controller @SessionAttributes("currentUser")</span> public class GreetingController{@RequestMapping public void hello(@ModelAttribute("currentUser")User user){//user.sayHello()}}以上就是本文關於spring學習之@SessionAttributes實例解析的全部內容,希望對大家有所幫助。感興趣的朋友可以繼續參閱本站其他相關專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!