• SpringMVC第六阶段:数据在域中的保存(02)


    数据在域中的保存(02)

    1、Map或Model或ModelMap形式保存数据在request域中

    在四个域中,我们使用最频繁的域就是request对象。往request域对象中,保存数据,还在以下的几种形式。
    我们可以在Controller的方法中,添加Map类型的参数,或者是Model类型的参数。或者是ModelMap类型的参数。都可以直接用来保存域数据到Request对象中。

    Map全类名是:

    java.util.Map
    
    • 1
    @RequestMapping(value = "/mapToRequest")
    public String mapToRequest(Map<String,Object> map){
        System.out.println(" mapToRequest() 方法调用了 ");
        // 我们把数据保存到Map中,这些数据也会自动的保存到Reqeust域中.
        map.put("mapKey1", "mapValue1");
        map.put("mapKey2", "mapValue2");
    
        return "ok";
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    Model全类名是:

    org.springframework.ui.Model
    
    • 1
    @RequestMapping(value = "/modelToRequest")
    public String modelToRequest(Model model){
        System.out.println(" modelToRequest() 方法调用了 ");
        // 我们把数据保存到 model 中,这些数据也会自动的保存到Reqeust域中.
        model.addAttribute("modelKey1", "modelValue1");
        model.addAttribute("modelKey2", "modelValue2");
    
        return "ok";
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    ModelMap全类名是:

    org.springframework.ui.ModelMap
    
    • 1
    @RequestMapping(value = "/modelMapToRequest")
    public String modelMapToRequest(ModelMap modelMap){
        System.out.println(" modelMapToRequest() 方法调用了 ");
        // 我们把数据保存到 model 中,这些数据也会自动的保存到Reqeust域中.
        modelMap.addAttribute("modelMapKey1", "modelMapValue1");
        modelMap.addAttribute("modelMapKey2", "modelMapValue2");
    
        return "ok";
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    隐含模型对象 :

     /**
         * 不管你是Map,还是Model,还是ModelMap,他们都是 BindingAwareModelMap 类 
    * class org.springframework.validation.support.BindingAwareModelMap
    * /\ * || * || * BindingAwareModelMap extends ExtendedModelMap * /\ * || * || * ExtendedModelMap extends ModelMap implements Model * /\ * || * || * ModelMap extends LinkedHashMap * * * BindingAwareModelMap 类是隐含模型对象!!!
    * BindingAwareModelMap 隐含模型中一般都用来保存 视图渲染时 需要的数据
    * 视图 就是页面 ( jsp页面 ) * 渲染 执行 */
    @RequestMapping(value = "/mapAndModelAndModelMap") public String mapAndModelAndModelMap( Map map , Model model , ModelMap modelMap ){ // org.springframework.validation.support.BindingAwareModelMap System.out.println( map ); System.out.println( model ); System.out.println( modelMap ); System.out.println(" 最美分隔线================================== "); map.put("mapKey1", "mapValue1"); System.out.println( map ); System.out.println( model ); System.out.println( modelMap ); System.out.println(" 最美分隔线================================== "); model.addAttribute("modelKey1", "modelValue1"); System.out.println( map ); System.out.println( model ); System.out.println( modelMap ); System.out.println(" 最美分隔线================================== "); modelMap.addAttribute("modelMapKey1", "modelMapValue1"); System.out.println( map ); System.out.println( model ); System.out.println( modelMap ); System.out.println(" 最美分隔线================================== "); System.out.println( map.getClass() ); System.out.println( model.getClass() ); System.out.println( modelMap.getClass() ); return "ok"; }
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55

    2、ModelAndView方式保存数据到request域中

    @RequestMapping(value = "/modelAndViewToReqeust")
    public ModelAndView modelAndViewToReqeust(){
        ModelAndView modelAndView = new ModelAndView("ok");
    
        //使用 ModelAndView 返回值保存数据到 Reqeuat 域中
        modelAndView.addObject("mavKey1", "mavValue1");
        modelAndView.addObject("mavKey2", "mavValue2");
    
        return modelAndView;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    3、@SessionAttributes保存数据到Session域中

    @SessionAttributes 注解可以标注在类上。它的作用是指定隐含模型中哪些数据可以保存到Session域中。

    @SessionAttributes(value = { "key1","key2" }, types = { String.class, Book.class })
    
    • 1

    value属性,它表示把request域中key为key1,key2的键值对信息,也保存到Session中
    types属性,它表示把request域中value类型为String.class或Book.class类型的键值对,也保存到Session中

    /**
     * @SessionAttributes 可以指定哪些隐含模型中的数据也同步保存到Session域中 
    * names 属性设置哪些 key 数据保存到Session中
    * types 属性设置哪些类型的 value 属性也同步到Session中
    */
    @SessionAttributes(types = {Integer.class,String.class}) @Controller public class ScopeController { @RequestMapping(value = "/sessionAttrubute") public String sessionAttrubute(Map<String,Object> map){ System.out.println(" sessionAttrubute() 方法调用了 "); // 我们把数据保存到Map中,这些数据也会自动的保存到Reqeust域中. map.put("mapKey1", "字符串类型"); map.put("mapKey2", new Integer(100)); return "ok"; } }
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    4、@ModelAttribute注解

    @ModelAttribute这个注解可以标注在方法和参数上。
    @ModelAttribute三个常见作用:
    1、被标注了@ModelAttribute的方法都会在Controller的目标方法之前执行。
    2、目标方法的参数(JavaBean对象)会先从隐含模型中获取值传入。( 参数会覆盖隐含模型中的值 )
    3、被标注在参数上,参数值会按照指定的key从隐含模型中获取值。

    @ModelAttribute
    public void modelAttributeFun( Map<String,Object> map ){
        // 可以为目标方法准备数据
        System.out.println(" modelAttributeFun() 方法被调用了 ");
        map.put("book1",new Book(100,"国哥,为什么你这么帅,帅的不要不要的!"));
    }
    
    /**
     * 目标方法的参数,如果是JavaBean,SpringMVC会先把这个参数的类型
     * 取类名Book,然后首字母小写.然后到隐含模型中取值传入
    */
    @RequestMapping(value = "/target") public String target( @ModelAttribute("book1") Book book){ System.out.println(" target() 方法调用了 =====>>>> " + book); return "ok"; }
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
  • 相关阅读:
    Cholesterol艾美捷胆固醇基参方案
    nodejs+vue中学信息技术线上学习系统-计算机毕业设计
    JavaScript 对象增删改查 + 遍历对象+内置函数 + 随机对象
    从零搭建云原生技术kubernetes(K8S)环境-通过kubesPhere的AllInOne方式
    【python】—— 内置类型、运算符、表达式、关键字
    Java Interview 200 Questions —— Day01 —— 备战2022年秋招 —— 经典 200 问
    Web2Code :网页理解和代码生成能力的评估框架
    [山东科技大学OJ]2297 Problem F: 编写函数:字符串的小写转大写(Append Code)
    面对海量数据挑战,企业怎样进行数据处理?
    03-QNX高可用框架HAM研究(转)
  • 原文地址:https://blog.csdn.net/qq_39311377/article/details/130796370