• 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 中.

    SessionAttributes

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

    参数

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

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

    ModelAttribute

    modelsttribute修饰的方法,会在所有的requestmapping方法调用之前先执行。这个方法可以在一些预处理工作,可以向model中放入数据。

    modelsttribute修饰入参,实际上就是修改了入参的id,这样就能够通过id取出model中的数据了。。

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

  • 相关阅读:
    select应用于read函数 超时非阻塞方式
    取文本索引所执向的值(简单)
    linux c函数指针的应用
    解决vsftp无法启动问题(转)
    Could not chdir to home directory /home/USER: Permission denied
    sscanf和正则表达式
    存储过程重置SEQUENCE值从新开始。
    Signal ()函数详细介绍 Linux函数(转)
    linux 环境NTP配置与开机自启动(转)
    linux下iconv()函数的用法(转载并修改)
  • 原文地址:https://www.cnblogs.com/Coder-Pig/p/7381175.html
Copyright © 2020-2023  润新知