sPRing允許我們有選擇地指定Model中的哪些屬性需要轉存到session中,以便下一個請求可通過Session來訪問到這些屬性。這一功能是通過類定義處標注@SessionAttributes注解來實現的。
@Controller@RequestMapping(value = "login")@SessionAttributes("mysession")//定義把Model中的mysession屬性的值綁定到Session中public class LoginController { @RequestMapping(method = RequestMethod.POST) public String login(@ModelAttribute User user, ModelMap model) { String viewName = ""; boolean check = true; if (check) { model.addAttribute("mysession", "123"); viewName = "redirect:/home"; } else { viewName = "redirect:/"; } return viewName; }}這樣我們不但可以在請求所對應的jsp視圖頁面中通過request.getAttribute()和session.getAttribute()獲取mysession,還可以在下一個請求所對應的JSP視圖頁面中通過session.getAttribute()或ModelMap#get()訪問到這個屬性。 這里我們僅將一個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”})。 范例2:通過@ModelAttribute綁定 我們使用@ModelAttribute把表單自動綁定到對象上,那這個對象也可以通過@ModelAttribute(“”)綁定到Session中。
@Controller@RequestMapping(value = "login")@SessionAttributes("user")//此處定義需要綁定到session中的model名稱public class LoginController {@RequestMapping(method = RequestMethod.POST)public String login(@ModelAttribute("user") User user, ModelMap model){ //@ModelAttribute將綁定到session中 String viewName = ""; boolean check = true; if (check) { viewName = "redirect:/home"; } else { viewName = "redirect:/"; } return viewName; }}范例3:@SessionAttributes清除 @SessionAttributes需要清除時,使用SessionStatus.setComplete();來清除。注意,它只清除@SessionAttributes的session,不會清除HttpSession的數據。故如用戶身份驗證對象的session一般不同它來實現,還是用session.setAttribute等傳統的方式實現。
@Controller@RequestMapping(value = "login")@SessionAttributes("mysession")// 定義把Model中的mysession屬性的值綁定到Session中public class LoginController { @RequestMapping(method = RequestMethod.POST) public String login(@ModelAttribute User user, ModelMap model, SessionStatus sessionStatus) { String viewName = ""; boolean check = true; if (check) { model.addAttribute("mysession", "1233"); viewName = "redirect:/home"; } else { viewName = "redirect:/"; } sessionStatus.setComplete(); return viewName; }}新聞熱點
疑難解答