前言
通过查看源码可以得知
这个类主要是
在web MVC框架中的模型和视图的Holder。 请注意,这些是完全不同的。 这个类仅仅保存了两者,使得控制器可以在一个返回值中同时返回模型和视图。
表示处理程序返回的模型和视图,由DispatcherServlet解析。 视图可以采用String视图名的形式,需要通过ViewResolver对象解析; 或者,可以直接指定一个View对象。 该模型是一个Map,允许使用多个按名称键控的对象。
通过总的概括可以得知
==ModelAndView中包含了一个model属性和一个view属性,model其实是一个ModelMap类型,它是一个LinkedHashMap的子类,view包含了一些视图信息。==
1. 方法
主要讲解常用方法和类方法的功能,之后会将一些大概方法和代码以及实战
==构造方法:==
方法 | 功能 |
---|---|
ModelAndView() | 默认构造函数,填充bean的属性 |
ModelAndView(String viewName) | 有参构造,模型数据暴露 |
ModelAndView(String viewName, Map model) | 创建一个视图名称和模型新的ModelAndView |
ModelAndView(String viewName, String modelName, Object modelObject) | 构造采取单一的模式对象 |
ModelAndView(View view) | 在没有模型数据暴露 |
ModelAndView(View view, Map model) | 创建一个视图对象和模型,新的ModelAndView |
ModelAndView(View view, String modelName, Object modelObject) | 构造采取单一的模式对象 |
==类方法==
方法 | 功能 |
---|---|
ModelAndView addAllObjects(Map modelMap) | 添加包含在所提供的地图模型中的所有条目 |
ModelAndView addObject(Object modelObject) | 添加对象使用的参数名称生成模型 |
ModelAndView addObject(String modelName,ObjectmodelObject) | 对象添加到模型中 |
Map getModel() | 返回的模型图 |
protectedMap getModelInternal() | 返回的模型图 |
ModelMap getModelMap() | 返回底层ModelMap实例(从不为null) |
View getView() | 返回View对象 |
String getViewName() | 返回视图名称由DispatcherServlet |
boolean isEmpty() | ModelAndView对象是否为空 |
void setView(Viewview) | 设置此ModelAndView的视图对象 |
void setViewName(StringviewName) | ModelAndView的设置视图名称,通过ViewResolverDispatcherServlet |
String toString() | 返回模型和视图的诊断信息 |
2. 配置
使用该类需要在在application.xml中配置支持ModelAndView
#配置视图解析器
spring.mvc.view.prefix=/
spring.mvc.view.suffix=.jsp
3. addObject 添加对象详解
比如下面的代码模型
具体功能参数上有已讲解
@Controller
public class IndexController {
@RequestMapping(value = "/say")
public ModelAndView say() {
ModelAndView mv = new ModelAndView();
mv.addObject("message","Hello,SpringBoot");
mv.setViewName("say");
return mv;
}
@RequestMapping(value = "/index")
public String index(Model model) {
model.addAttribute("message","HelloWorld");
return "say";
}
}
jsp具体内容为
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h1>${message}</h1>
</body>
</html>
通过ModelAndView构造方法可以指定返回的页面名称,也可以通过setViewName()方法跳转到指定的页面
用这个方法传值到jsp也是可以的
4. 重定向
Spring MVC中ModelAndView一般用来返回视图,但是ModelAndView也是支持Servlet中的两种重定向方式,ModelAndView默认使用forward重定向方式,同时也支持redirect重定向。
redirect重定向
public ModelAndView getPage404() {
ModelAndView mv = new ModelAndView("redirect:/404.htm");
return mv;
}
forward重定向
public ModelAndView saveUser(HttpServletRequest request, HttpServletResponse response,UserModel user) throws Exception {
ModelAndView mv = new ModelAndView("/user/save/result");//默认为forward模式
mv.addObject("message","保存用户成功!");
return mv;
}