百度搜索 @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中的参数