百度搜索 @SessionAttributehtml
這一句絕大多數文章中不存在:session
若是Model中沒有name參數,而session中存在一個name參數,那麼SessionAttribute會講這個參數塞進Model中app
@ModelAttribute註解做用在方法上或者方法的參數上,表示將被註解的方法的返回值或者是被註解的參數做爲Model的屬性加入到Model中,而後Spring框架自會將這個Model傳遞給ViewResolver。Model的生命週期只有一個http請求的處理過程,請求處理完後,Model就銷燬了。框架
若是想讓參數在多個請求間共享,那麼能夠用到要說到的@SessionAttribute註解post
SessionAttribute只能做用在類上url
@Controller
@RequestMapping("sc") @SessionAttributes("name") public class SessionController { @RequestMapping("session") public String sessions(Model model,HttpSession session){ model.addAttribute("name", "winclpt"); session.setAttribute("myName", "chke"); return "session"; }
上面的代碼將Model中的name參數保存到了session中(若是Model中沒有name參數,而session中存在一個name參數,那麼SessionAttribute會講這個參數塞進Model中)spa
SessionAttribute有兩個參數:code
String[] value:要保存到session中的參數名稱htm
Class[] typtes:要保存的參數的類型,和value中順序要對應上blog
因此能夠這樣寫:@SessionAttributes(types = {User.class,Dept.class},value={「attr1」,」attr2」})
原理理解:它的作法大概能夠理解爲將Model中的被註解的attrName屬性保存在一個SessionAttributesHandler中,在每一個RequestMapping的方法執行後,這個SessionAttributesHandler都會將它本身管理的「屬性」從Model中寫入到真正的HttpSession;一樣,在每一個RequestMapping的方法執行前,SessionAttributesHandler會將HttpSession中的被@SessionAttributes註解的屬性寫入到新的Model中。
若是想刪除session中共享的參數,能夠經過SessionStatus.setComplete(),這句只會刪除經過@SessionAttribute保存到session中的參數