SessionAttributes和ModelAttribute

* SpringMVC 肯定目标方法 POJO 类型入参的过程
* 1. 取得POJO入参的 key:
*        1). 若目标方法的 POJO 类型的参数没有使用 @ModelAttribute 做为修饰, 则 key 为 POJO 类名第一个字母的小写
*        2). 若使用了 @ModelAttribute 来修饰, 则 key 为 @ModelAttribute 注解的 value 属性值.
* 2. 在 implicitModel (注意,使用ModelAttribute注解的类的返回的模型会被放到implicitModel中)中查找 key 对应的对象, 若存在, 则做为入参传入
*         1). 若在 @ModelAttribute 标记的方法中在 Map 中保存过, 且 key 和 1 肯定的 key 一致, 则会获取到.
* 3. 若 implicitModel 中不存在 key 对应的对象, 则检查当前的 Handler 是否使用 @SessionAttributes 注解修饰,
*        若使用了该注解, 且 @SessionAttributes 注解的 value 属性值中包含了 key, 则会从 HttpSession 中来获取 key 所
*        对应的 value 值, 若存在则直接传入到目标方法的入参中. 若不存在则将抛出异常. (这里注意,若是使用SessionAttributes定义的key,你没有事先放到model里面,那么任 *        什么时候候视图获取这个key的对象,都会抛出异常)
* 4. 若 Handler 没有标识 @SessionAttributes 注解或 @SessionAttributes 注解的 value 值中不包含 key, 则
*      会经过反射来建立 POJO 类型的参数, 传入为目标方法的参数
* 5. SpringMVC 会把 key 和 POJO 类型的对象保存到 implicitModel 中, 进而会保存到 request 中.数组

 

SessionAttributessession

  默认状况下Spring MVC将模型中的数据存储到request域中。当一个请求结束后,数据就失效了。
       若是要跨页面使用。那么须要使用到session。而@SessionAttributes注解就可使得模型中的数据存储一份到session域中。app

参数spa

  一、names:这是一个字符串数组。里面应写须要存储到session中数据的名称。
       二、types:根据指定参数的类型,将模型中对应类型的参数存储到session中
    三、value:其实和names是同样的rest

这样在修饰的控制器类中的全部@requrestMapping的方法中放入model的key的值若是在names/value中定义了,那么这个key和对象就会被放到session域中,
若是这个key没有被放入model而取出来的话,会爆出异常。对象

ModelAttributeci

modelsttribute修饰的方法,会在全部的requestmapping方法调用以前先执行。这个方法能够在一些预处理工做,能够向model中放入数据。字符串

modelsttribute修饰入参,实际上就是修改了入参的id,这样就可以经过id取出model中的数据了。。it

 

注意在controller的这个Model的体系中,id是很是重要的,不指定时,id就是类名首字母小写io

相关文章
相关标签/搜索