当控制器处理完请求时,通常会将包含视图名称或视图对象以及一些模型属性的ModelAndView对象返回到DispatcherServlet。
因此,经常需要在控制器中构造ModelAndView对象。ModelAndView类提供了几个重载的构造器和一些方便的方法,
让你可以根据自己的喜好来构造ModelAndView对象。这些构造器和方法以类似的方式支持视图名称和视图对象。
当你只有一个模型属性要返回时,可以在构造器中指定该属性来构造ModelAndView对象.通过ModelAndView构造方法可以指定返回的页面名称,也可以通过setViewName()方法跳转到指定的页面 ,
使用addObject()设置需要返回的值,addObject()有几个不同参数的方法,可以默认和指定返回对象的名字。
调用addObject()方法将值设置到一个名为ModelMap的类属性,ModelMap是LinkedHashMap的子类,
具体请看类。
ModelAndView 包括Model 和View ,下面是他的构造方法中的两个

public ModelAndView(String viewName, Map<String, ?> model) {  this.view = viewName;  if (model != null) {  getModelMap().addAllAttributes(model);  }  }  
public ModelAndView(View viewName, Map<String, ?> model) {  this.view = viewName;  if (model != null) {  getModelMap().addAllAttributes(model);  }  }  

页面显示

ModelAndView对象被放置在Request对象中,可以在页面中利用${keyName}直接访问存在model中的对象。第一个参数是页面名称。

package com.fts.controller;import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;import com.fts.model.User;@Controller
public class Test_ModelAndView {@RequestMapping("Test_ModelAndView")public ModelAndView test(){ModelAndView mv=new ModelAndView();//ModelAndView mv=new ModelAndView("welcome");mv.setViewName("welcome"); //返回的文件名  mv.addObject("message","hello kitty");  //类User user = new User();user.setAge(20);user.setName("nihao");mv.addObject("user",user);  //List  List<String> list = new ArrayList<String>();  list.add("java");  list.add("c++");  list.add("oracle");  mv.addObject("bookList", list);  //Map  Map<String,String> map = new HashMap<String,String>();  map.put("zhangsan", "北京");  map.put("lisi", "上海");  map.put("wangwu", "深圳");  mv.addObject("map",map);  return mv;  }@RequestMapping("show") public Map<String, String> getMap() { Map<String, String> map = new HashMap<String, String>(); map.put("key1", "value-1"); map.put("key2", "value-2"); return map; } }

页面

然后修改welcome.jsp输出数据,
遍历集合可使用jstl表达式,需在jsp中引入头文件

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> 

lib下导入jstl.jar和standard.jar。
首先这两个jar在哪里可以找到,当然可以在网上下载。
另外在tomcat下面就有,在\webapps\examples\WEB-INF\lib下
前提是你还没有把webapps下面的一些无用项目删掉。
welcome.jsp

<%@ page language="java" contentType="text/html; charset=utf-8"pageEncoding="utf-8"%><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
<body>  <!-- 输出普通字符 -->  ${message } <br/>  <!-- 输出List -->  <p>书籍列表</p>  <c:forEach items="${bookList}" var="node">  <c:out value="${node}"></c:out>  </c:forEach>  <br/>  <br/>  ${user }<br/>  <br/> <table border="1"><tr><th>Month</th><th>Savings</th></tr><tr><td>${user.name }</td><td>${user.age }</td></tr>
</table><br/>  <br/> <!-- 输出Map -->  <c:forEach items="${map}" var="node">  姓名:<c:out value="${node.key}"></c:out>  住址:<c:out value="${node.value}"></c:out>  <br/>  </c:forEach>
</body>
</body>
</html>

ModelAndView重定向

spring web framework利用ModelAndView也能实现forward、redirec

public ModelAndView getPage404MV() {        ModelAndView mv = new ModelAndView("redirect:/404.htm");return mv;
}
 //第三个参数(UserModel user)默认为绑定对象  @RequestMapping(value = "/user/save", method = RequestMethod.POST)  public ModelAndView saveUser(HttpServletRequest request, HttpServletResponse response,UserModel user) throws Exception {  ModelAndView mv = new ModelAndView("/user/save/result");//默认为forward模式
//      ModelAndView mv = new ModelAndView("redirect:/user/save/result");//redirect模式  mv.addObject("message","保存用户成功!");  return mv;  }  

map返回数据

@RequestMapping("/demo2/show") public Map<String, String> getMap() { Map<String, String> map = new HashMap<String, String>(); map.put("key1", "value-1"); map.put("key2", "value-2"); return map; } 

在jsp页面中可直通过${key1}获得到值, map.put()相当于request.setAttribute方法。
写例子时发现,key值包括 - . 时会有问题.

jsp

ModelAndView 详解相关推荐

  1. spring boot 实战 / 可执行war启动参数详解

    概述   上一篇文章<spring boot 实战 / mvn spring-boot:run 参数详解>主要讲解了spring boot 项目基于maven插件启动过程中借助profil ...

  2. springmvc常用注解标签详解

    参考:https://www.cnblogs.com/leskang/p/5445698.html 1.@Controller 在SpringMVC 中,控制器Controller 负责处理由Disp ...

  3. 处理器拦截器(HandlerInterceptor)详解

    处理器拦截器(HandlerInterceptor)详解 编程界的小学生 关注 2017.04.06 15:19* 字数 881 阅读 657评论 0喜欢 4 简介 SpringWebMVC的处理器拦 ...

  4. Spring MVC 学习总结(二)——控制器定义与@RequestMapping详解

    Spring MVC 学习总结(二)--控制器定义与@RequestMapping详解 目录 一.控制器定义 1.1.实现接口Controller定义控制器 1.2.使用注解@Controller定义 ...

  5. Spring MVC 框架搭建及详解

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

  6. [转]springmvc常用注解标签详解

    1.@Controller 在SpringMVC 中,控制器Controller 负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业务处理层处理之后封装成一个Model ...

  7. Spring框架深入(四)--SpringMVC配置详解

    一.SpringMVC web模型 二.@RequestMapping参数说明 1.value:定义处理方法的请求的URL地址: 2.method:定义处理的方法的http method类型,如GET ...

  8. java注解式开发_JAVA语言之Spring MVC注解式开发使用详解[Java代码]

    本文主要向大家介绍了JAVA语言的Spring MVC注解式开发使用详解,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助. MVC注解式开发即处理器基于注解的类开发, 对于每一个定义的处 ...

  9. 第五章 处理器拦截器详解——跟着开涛学SpringMVC

    5.1.处理器拦截器简介 Spring Web MVC的处理器拦截器(如无特殊说明,下文所说的拦截器即处理器拦截器)类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理.   ...

  10. SoringMVC-常用注解标签详解(摘抄)

    1.@Controller 在SpringMVC 中,控制器Controller 负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业务处理层处理之后封装成一个Model ...

最新文章

  1. 今天新开通cnblogs,就说几句,留作纪念。
  2. Android SDK与API版本的对应关系
  3. php 构造 析构,php 构造方法和析构方法
  4. C 一个非递减数组 下标从0到n 元素的取值范围为从0到n的整数 判断其中是否有重复元素
  5. Magento后台表单字段添加备注
  6. jmeter 做ip欺骗遇到的坑
  7. 桥接模式下的手机-电脑-开发板连接
  8. php设置排序,7种php基本排序实现方法
  9. datagrid传参_DataGrid里面要传两个参数怎么传
  10. 哈希表查找失败的平均查找长度_面试官:哈希表都不知道,你是怎么看懂HashMap的?...
  11. mysql数据库表字段使用DESC等关键字报错及解决方法
  12. 如何从一段视频中一次性修整多个片段
  13. 衍射受限透镜成像_成像专题 | 基于孔径阵列的数字全息重建 (AIP APL)
  14. 史密斯圆图matlab,用MATLAB程序实现Smith圆图的图解过程
  15. 脸上经常长青春痘痘的青年应该多吃的食物
  16. java 定时取出一段时间,Java 实现定时任务的三种方法
  17. 电赛 电容触摸串口屏
  18. 智慧数字经营要怎么代理加盟? 本文详解。
  19. 2014 ACM-ICPC 亚洲地区赛 西安站小结
  20. 【 Kotlin 脚本编程Kotlin Scripting 】Linux Shell 脚本与Kotlin Scripting

热门文章

  1. Captura录屏软件使用说明
  2. yii2 restful web服务[格式响应]
  3. 基于ARM的嵌入式Linux应用程序开发
  4. 设计模式学习书籍推荐(设计模式书籍你读过哪几本)
  5. 趣学Python 教孩子学编程pdf
  6. Docker安装(有网环境下) 最新版docker-ce安装教程
  7. java语言程序设计郎波_Java语言程序设计(第3版) 郎波 清华大学出版社
  8. 【FPGA】DS18B20温度显示
  9. 中兴iptv机顶盒破解教程图文:亲测中兴B760EV3、B860A、B860AV1.1完美安装应用!非ttl破解![转]
  10. 基于matlab的彩色图像分割,基于Matlab的彩色图像分割