SpringMVC之ModelAndView类详细分析(全)

前言

在这里插入图片描述

通过查看源码可以得知
这个类主要是
在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;  
}
  • 7
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码农研究僧

你的鼓励将是我创作的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值