首页 > 代码库 > ModelAndView类

ModelAndView类

从名字上看ModelAndView中的Model代表模型,View代表视图,这个名字就很好地解释了该类的作用。业务处理器调用模型层处理完用户请求 后,把结果数据存储在该类的model属性中,把要返回的视图信息存储在该类的view属性中,然后让该ModelAndView返回该Spring MVC框架。框架通过调用配置文件中定义的视图解析器,对该对象进行解析,最后把结果数据显示在指定的页面上。

下面看ModelAndView.Java的代码,如下所示。

  1. package org.springframework.web.servlet;  
  2. import Java.util.HashMap;  
  3. import Java.util.Map;  
  4. public class ModelAndView {  
  5.     private Object view;                //该属性用来存储返回的视图信息  
  6.     private Map model;                      //该属性用来存储处理后的结果数据  
  7.     //下面是一些参数不同的构造函数,用来创建ModelAndView实例  
  8.     public ModelAndView() {  
  9.     }  
  10.     public ModelAndView(View view) {  
  11.         this.view = view;  
  12.     }  
  13.     public ModelAndView(String viewName) {  
  14.         this.view = viewName;  
  15.     }  
  16.     public ModelAndView(View view, Map model) {  
  17.         this.view = view;  
  18.         this.model = model;  
  19.     }  
  20.     public ModelAndView(String viewName, Map model) {  
  21.         this.view = viewName;  
  22.         this.model = model;  
  23.     }  
  24.     public ModelAndView(View view, String modelName,
    Object modelObject) { 
  25.         this.view = view; 
  26.         addObject(modelName, modelObject); 
  27.     } 
  28.     public ModelAndView(String viewName, String modelName,
    Object modelObject)  { 
  29.         this.view = viewName; 
  30.         addObject(modelName, modelObject); 
  31.     } 
  32.  //view属性的getter、setter方法,可以看出view属性可以是一个View类的实例,也可以是一个String
  33.     public void setView(View view) { 
  34.         this.view = view; 
  35.     } 
  36.     public View getView() { 
  37.         return (this.view instanceof View ? (View) this.view : null); 
  38.     } 
  39.     public void setViewName(String viewName) { 
  40.         this.view = viewName; 
  41.     } 
  42.     public String getViewName() { 
  43.         return (this.view instanceof String ? (String) this.view : null); 
  44.     } 
  45.     public boolean isReference() { 
  46.         return (this.view instanceof String); 
  47.     } 
  48.     //下面的方法用来给model属性赋值、或者获取该属性的值,model是一个Map类型的属性 
  49.     protected Map getModelInternal() { 
  50.         return this.model; 
  51.     } 
  52.     public Map getModel() { 
  53.         if (this.model == null) { 
  54.             this.model = new HashMap(1); 
  55.         } 
  56.         return this.model; 
  57.     } 
  58.     public ModelAndView addObject(String modelName, Object modelObject) { 
  59.         getModel().put(modelName, modelObject); 
  60.         return this
  61.     } 
  62.     public ModelAndView addAllObjects(Map modelMap) { 
  63.         getModel().putAll(modelMap); 
  64.         return this
  65.     } 
  66.     ... 

通过上面的代码可以看出,ModelAndView创建了两个属性view和model,并且创建了获取这两个属性以及给这两个属性赋值的一些方法。view属性可以是View接口的一个实例,也可以是一个String类型的值,所有的视图类都必须实现View接口,在后面的内容中将会讲到;model属性是一个Map类型的值,所以其每一个元素都是一个Key-Value对。

ModelAndView类