SpringMVC @SessionAttribute 使用说明

百度搜索 @SessionAttributehtml

 

这一句绝大多数文章中不存在:session

若是Model中没有name参数,而session中存在一个name参数,那么SessionAttribute会讲这个参数塞进Model中app

 

@SessionAttribute使用详解

@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中的参数

相关文章
相关标签/搜索