ModelAndView属性中两个最重要的属性是model和view。

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()有几个不同数的方法,可以默认和指定返回对象的名字。

 

ModelAndView对象的更多相关文章

  1. springMVC3学习(二)--ModelAndView对象

    当控制器处理完请求时,一般会将包括视图名称或视图对象以及一些模型属性的ModelAndView对象返回到DispatcherServlet. 因此,常常须要在控制器中构造ModelAndView对象. ...

  2. springMVC3学习--ModelAndView对象(转)

    原文链接:springMVC3学习(二)--ModelAndView对象 当控制器处理完请求时,通常会将包含视图名称或视图对象以及一些模型属性的ModelAndView对象返回到DispatcherS ...

  3. SpringMVC中ModelAndView对象与“视图解析器”

    摘要: spring MVC这个环境中,Spring MVC会依据controller(或者你叫它handler)中处理方法的返回值,进行解析,解析之后提供一个视图,作为响应. 标注了@Control ...

  4. spring MVC之构造ModelAndView对象

    spring MVC之构造ModelAndView对象 ---------- 构造ModelAndView对象 当控制器处理完请求时,通常会将包含视图名称或视图对象以及一些模型属性的ModelAndV ...

  5. ModelAndView对象作用

    ModelAndView ModelAndView对象有两个作用: 作用一  :设置转向地址,如下所示(这也是ModelAndView和ModelMap的主要区别) ModelAndView mv = ...

  6. ModelMap和ModelAndView的作用

    首先介绍ModelMap和ModelAndView的作用 ModelMap ModelMap 对象主要用于传递控制方法处理数据到结果页面,也就是说我们把结果页面上需要的数据放到ModelMap对象中即 ...

  7. ModelMap和ModelAndView

    一.ModelMap和ModelAndView 1.1.ModelMap ModelMap对象主要用于传递控制方法处理数据到结果页面,也就是说我们把结果页面上需要的数据放到ModelMap对象中即可, ...

  8. ModelMap和ModelAndView(转)

    转自:http://bao1073740756-126-com.iteye.com/blog/1549597 首先介绍ModelMap和ModelAndView的作用 ModelMap ModelMa ...

  9. SpringMVC(二)--处理数据模型、ModelAndView、Model、Map、重定向、@ModelAttribute、

    1.处理模型数据 Spring MVC 提供了以下几种途径输出模型数据:      – ModelAndView:处理方法返回值类型为 ModelAndView 时, 方法体即可通过该对象添加模型数据 ...

随机推荐

  1. pyton unittest

    在说unittest之前,先说几个概念: TestCase 也就是测试用例 TestSuite 多个测试用例集合在一起,就是TestSuite TestLoader是用来加载TestCase到Test ...

  2. H5兼容ie做法

    IE浏览器支持新的标签:可以在使用新标签之前用javascript创建一个虚假的标签,这样就可以识别了.如<article>标签,在使用前,创建一个虚假的<article>标签 ...

  3. SpringMVC工作原理示意图

    上面的是springMVC的工作原理图: 1.客户端发出一个http请求给web服务器,web服务器对http请求进行解析,如果匹配DispatcherServlet的请求映射路径(在web.xml中 ...

  4. Android 开发 VectorDrawable 矢量图 (三)矢量图动画

    VectorDrawable 矢量图 三部曲: Android 开发 VectorDrawable 矢量图 (一)了解Android矢量图与获取矢量图 Android 开发 VectorDrawabl ...

  5. 转载:oracle 启动过程--oracle深入研究

    Oracle数据库的启动-nomount状态深入解析 通常所说的Oracle Server主要由两个部分组成:Instance和Database.Instance是指一组后台进程(在Windows上是 ...

  6. Matplotlib--基本使用

    基础应用 import matplotlib.pyplot as plt import numpy as np #使用np.linspace定义x:范围是(-1,1);个数是50. 仿真一维数据组(x ...

  7. 443. String Compression

    原题: 443. String Compression 解题: 看到题目就想到用map计数,然后将计数的位数计算处理,这里的解法并不满足题目的额外O(1)的要求,并且只是返回了结果array的长度,并 ...

  8. linux 权限之acl

    查看分区ACL权限是否开启 centos 6 dumpe2fs -h /dev/sda1(是查看ext2/ext3/ext4 文件系统信息的命令) centos 7   xfs_growfs /dev ...

  9. week07 13.2 NewsPipeline之 二 News Fetcher - Xpath

    我们使用Xpath来专门做一个scrapter 我们专门弄个文件夹 里面全部是 各个新闻源(CNN BBC等)的scraper来抓取网站的text内容 主要函数(就是传入text内容的那个url)然后 ...

  10. 使用@FeignClient时,报java.lang.NoClassDefFoundError: feign/Feign$Builder错

    错误信息: Caused by: java.lang.ClassNotFoundException: feign.Feign$Builder at java.net.URLClassLoader.fi ...