一.前言

ModelAndView类用来存储处理完后的结果数据,以及显示该数据的视图,其中Model代表模型,View代表视图。业务处理器调用模型层处理完用户请求后,把结果数据存储在该类的model属性中,把要返回的视图信息存储在该类的view属性中,然后让该ModelAndView返回该Spring MVC框架。框架通过调用配置文件中定义的视图解析器,对该对象进行解析,最后把结果数据显示在指定的view页面。

二.主要功能

1.跳转指定页面且传递参数

下面利用springboot和thyemeleaf模板引擎测试

    @GetMapping("/regist")public ModelAndView regist(){ModelAndView view = new ModelAndView("regist");User user = new User("lss0555","123456");view.addObject("name","lss");view.addObject("user",user);return view;}

其中regist.html页面

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.w3.org/1999/xhtml">
<head><meta charset="UTF-8">
</head>
<body><div><div>  name: <span th:text="${name}"/></div><div>  username: <span th:text="${user.username}"/></div><div>  password: <span th:text="${user.password}"/></div></div>
</body>
</html>

访问/regist,结果:

name: lss
username: lss0555
password: 123456

三.源码

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//package org.springframework.web.servlet;import java.util.Map;
import org.springframework.http.HttpStatus;
import org.springframework.ui.ModelMap;
import org.springframework.util.CollectionUtils;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, HttpStatus status) {this.view = viewName;this.status = status;}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);}public void setViewName(String viewName) {this.view = viewName;}public String getViewName() {return this.view instanceof String ? (String)this.view : null;}public void setView(View view) {this.view = view;}public View getView() {return this.view instanceof View ? (View)this.view : null;}public boolean hasView() {return this.view != null;}public boolean isReference() {return this.view instanceof String;}protected Map<String, Object> getModelInternal() {return this.model;}public ModelMap getModelMap() {if (this.model == null) {this.model = new ModelMap();}return this.model;}public Map<String, Object> getModel() {return this.getModelMap();}public void setStatus(HttpStatus status) {this.status = status;}public HttpStatus getStatus() {return this.status;}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;}public void clear() {this.view = null;this.model = null;this.cleared = true;}public boolean isEmpty() {return this.view == null && CollectionUtils.isEmpty(this.model);}public boolean wasCleared() {return this.cleared && this.isEmpty();}public String toString() {StringBuilder sb = new StringBuilder("ModelAndView: ");if (this.isReference()) {sb.append("reference to view with name '").append(this.view).append("'");} else {sb.append("materialized View is [").append(this.view).append(']');}sb.append("; model is ").append(this.model);return sb.toString();}
}

springmvc之ModelAndView的使用详解相关推荐

  1. springboot+jsp中文乱码_【spring 国际化】springMVC、springboot国际化处理详解

    在web开发中我们常常会遇到国际化语言处理问题,那么如何来做到国际化呢? 你能get的知识点? 使用springgmvc与thymeleaf进行国际化处理. 使用springgmvc与jsp进行国际化 ...

  2. SpringMVC基础--spring MVC配置详解

    牧涛 --<-<-<@态度决定一切→_→... 博客园 首页 新闻 新随笔 联系 管理 订阅 随笔- 171  文章- 3  评论- 79  spring MVC配置详解 现在主流的 ...

  3. springmvc教程--注解开发基础详解

    springmvc教程系列 springmvc史上最好教程(2) springmvc史上最好教程(1) 一. 注解开发-基础 1.1 需求 使用springmvc+mybatis架构实现商品信息维护. ...

  4. SpringMvc之参数绑定注解详解

    在 SpringMVC 中,提交请求的数据是通过方法形参来接收的.从客户端请求的 key/value 数据,经过参数绑定,将 key/value 数据绑定到 Controller 的形参上,然后在 C ...

  5. springmvc配置ssl_spring MVC配置详解

    现在主流的Web MVC框架除了Struts这个主力 外,其次就是Spring MVC了,因此这也是作为一名程序员需要掌握的主流框架,框架选择多了,应对多变的需求和业务时,可实行的方案自然就多了.不过 ...

  6. Model、ModelMap和ModelAndView的使用详解

    1.前言 最近SSM框架开发web项目,用得比较火热.spring-MVC肯定用过,在请求处理方法可出现和返回的参数类型中,最重要就是Model和ModelAndView了,对于MVC框架,控制器Co ...

  7. 在拦截器里放入参数 controller_干货|SpringMVC拦截器的使用详解

    一.拦截器简介 Spring MVC的处理器拦截器类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理. 常见应用场景 1.日志记录:记录请求信息的日志,以便进行信息监控.信 ...

  8. SpringMVC拦截器-快速入门详解(应用)

    拦截器在预处理后什么情况下会执行目标资源,什么情况下不执行目标资源,以及在有多个拦截器的情况下拦截器的执行顺序是什么? 再编写一个拦截器2, public class MyInterceptor2 i ...

  9. SpringMVC 基于注解的Controller详解

    本文出处 http://blog.csdn.net/lufeng20/article/details/7598801 概述 继 Spring 2.0 对 Spring MVC 进行重大升级后,Spri ...

最新文章

  1. linux删除目录排除,Linux中移动,复制,删除,打包排除某个目录或文件
  2. Python实例讲解 -- 认识wxpython 的 Frame
  3. Nginx限制连接数和下载速度
  4. 一线大厂在用的反爬虫方法,看我如何破了它!
  5. 安卓案例:View动画——弹球碰壁
  6. 跨进程的 键盘钩子_Delphi下深入Windows编程之钩子原理一
  7. Markdown示例
  8. ios中webview的高级用法(二)
  9. 计算机技巧:Vmware虚拟机恢复物理机GHOST备份
  10. 给SLAM小车添加 手柄遥控 功能 罗技F710和PS4 手柄
  11. 微信小程序获取手机号
  12. 英语语法篇 - 时态
  13. 【安全】椭圆曲线加密算法(ECC)深入理解
  14. oracle arm服务器_Oracle和ARM合作优化嵌入式Java
  15. valist:解决变参问题
  16. 机器学习如何提高GPU利用率
  17. 金胜维固态硬盘MK8115主控开卡成功教程
  18. React styled-components TypeScript 的最佳实践
  19. oracle基础教学:如何设置外键
  20. 优惠券系统-第一章-系统设计

热门文章

  1. 如何计算电池充满电的预计时间
  2. 数据分析中的核心概念概述
  3. abstract类与interface接口的区别
  4. OpenCV-Python学习(14)—— OpenCV 绘制箭头线(cv.arrowedLine)
  5. jssip + webRtc + Freeswitch 实现web端接打电话功能
  6. 【设计模式】策略模式VS状态模式
  7. 线段树为什么要开四倍区间大小的数组
  8. 两台电脑连接交换机通信
  9. spark java udf_在 Apache Spark 中使用 UDF
  10. 【简单电话系统的电话数量分析】