• ModelAndView对象


      ModelAndView属性中两个最重要的属性是modelview

        

        view即视图,保存的是视图信息。

        model即模型,以<K,V>形式保存模型数据,上图可以看到是MdelMap类型,而ModelMap是LinkedHashMap的子类。

            在实际使用时,业务处理器调用控制层处理完用户请求后,会把结果数据存储在该类的model属性中,把要返回的视图信息存储在该类的view属性中,然后让该ModelAndView返回该Spring MVC框架。

        然后框架通过调用配置文件中定义的视图解析器,对该对象进行解析,最后把结果数据显示在指定的页面上。 

      构造方法和常用方法:

    public class ModelAndView {
        private Object view;
        private ModelMap model;
        private HttpStatus status;
        private boolean cleared = false;
    
        public ModelAndView() {
        }
    
        public ModelAndView(String viewName) {
            this.view = viewName;
        }
    
        public ModelAndView(View view) {
            this.view = view;
        }
    
        public ModelAndView(String viewName, Map<String, ?> model) {
            this.view = viewName;
            if (model != null) {
                this.getModelMap().addAllAttributes(model);
            }
    
        }
    
        public ModelAndView(View view, Map<String, ?> model) {
            this.view = view;
            if (model != null) {
                this.getModelMap().addAllAttributes(model);
            }
    
        }
    
        public ModelAndView(String viewName, Map<String, ?> model, HttpStatus status) {
            this.view = viewName;
            if (model != null) {
                this.getModelMap().addAllAttributes(model);
            }
    
            this.status = status;
        }
    
        public ModelAndView(String viewName, String modelName, Object modelObject) {
            this.view = viewName;
            this.addObject(modelName, modelObject);
        }
    
        public ModelAndView(View view, String modelName, Object modelObject) {
            this.view = view;
            this.addObject(modelName, modelObject);
        }

        

        我们可以看到总共有7个构造函数,还有我们经常使用的两个方法:setviewName()和addObject()

    public void setViewName(String viewName) {
            this.view = viewName;
        }
    public ModelAndView addObject(String attributeName, Object attributeValue) {
            this.getModelMap().addAttribute(attributeName, attributeValue);
            return this;
        }
    
        public ModelAndView addObject(Object attributeValue) {
            this.getModelMap().addAttribute(attributeValue);
            return this;
        }
    
        public ModelAndView addAllObjects(Map<String, ?> modelMap) {
            this.getModelMap().addAllAttributes(modelMap);
            return this;
        }

      作用:

        作用一: 设置转向地址 
              给ModelAndView实例设置view的方法有两个:setViewName(String viewName) 和 setView(View view)。前者是使用viewName,后者是使用预先构造好的View对象。

      作用二: 用于传递控制方法处理结果数据到结果页面

                      我们把需要在结果页面上需要的数据放到ModelAndView对象中即可,它的作用类似于request对象的setAttribute方法的作用,用来在一个请求过程中传递处理的数据。通过以下方法向页面传递参数:

              addObject(String key,Object value); 

      作用三:设置重定向

             ModelAndView默认是转发,我们也可以重定向另一个控制器或者具体的jsp页面,如下:      

     return new ModelAndView("redirect:/xxx.jsp")

      总结:

              当控制器处理完请求时,通常会将包含视图名称或视图对象以及一些模型属性的ModelAndView对象返回到DispatcherServlet视图解析器。所以经常需要在控制器中构造ModelAndView对象。ModelAndView类提供了几个重载的构造器和一些方便的方法,我们可以根据自己的需要来构造ModelAndView对象。

        这些构造器和方法以类似的方式支持视图名称和视图对象。通过ModelAndView构造方法也可以指定返回的页面名称,也可以通过setViewName()方法跳转到指定的页面 , 使用addObject()设置需要返回的值,addObject()有几个不同数的方法,可以默认和指定返回对象的名字。

     

  • 相关阅读:
    scanf与scanf_s的区别
    C语言输出时的各种%
    Windows下配置OpenGL环境
    C#高级进阶--重写函数
    Linux下安装国际版QQ (转)
    Linux Vim不明原因卡死解决办法
    iCamera App Kit 使用说明
    usb2.0高速视频采集之68013A寄存器配置说明
    iSensor APP 之 摄像头调试 OV5642 续集2
    iSensor APP 之 摄像头调试 OV9655 测试之二
  • 原文地址:https://www.cnblogs.com/fankailei/p/10040298.html
Copyright © 2020-2023  润新知