ModelAndView详解

发布时间:2023-05-21

一、什么是ModelAndView

ModelAndView是Spring MVC 中的一个类,它作为具有模型数据和视图名称的持有者,可以向视图传递数据,并指示哪个视图显示这些数据。通俗点讲,它是处理请求时封装数据和返回视图的对象。 在控制器方法中,我们可以创建ModelAndView对象,然后将模型数据添加到该对象中,最终将视图名称和ModelAndView对象返回给DispatcherServlet并响应给客户端。基于这种方式,我们可以使用ModelAndView对象添加、获取模型数据,以及指定模型数据和视图名称,从而实现数据和视图之间的传递和绑定。

二、ModelAndView的优点

ModelAndView 主要的优点是它能够将模型数据和视图名称指定在一个对象中,简化了控制器与视图的数据传递,同时也提升了代码的可读性和可维护性。在开发过程中,ModelAndView同样适用于复杂业务场景,其中数据和视图会被传递到多个地方,此时可以将ModelAndView设计成一个公用的数据模型,方便处理大量的数据和视图。

三、如何使用ModelAndView

在使用SpringMVC进行Web应用程序开发时,ModelAndView承担了很多的工作,我们可以通过以下步骤操作:

1.在控制器方法中创建一个新的ModelAndView对象

ModelAndView modelAndView = new ModelAndView();

2.向ModelAndView添加模型数据

将需要传递给视图的模型数据添加到ModelAndView对象中。使用addObject的方法可以指定对象的名称和其对应的值。该方法可重载,可以添加各种类型的值。

modelAndView.addObject("name","张三");
modelAndView.addObject("age",18);

3.设置视图名称

使用setViewName的方法为ModelAndView设置视图名称。该方法传入一个视图名称字符串,SpringMVC根据该名称查找真正的视图,例如jsp页面。

modelAndView.setViewName("hello");

4.将ModelAndView传递给DispatcherServlet

在控制器方法返回ModelAndView对象。如果控制器方法返回一个视图名称,那么SpringMVC将使用该名称查找真正的视图。

return modelAndView;

四、示例代码

控制器方法

@RequestMapping("/hello")
public ModelAndView showMessage(){
    ModelAndView modelAndView = new ModelAndView();
    modelAndView.setViewName("hello");
    modelAndView.addObject("name","张三");
    modelAndView.addObject("age",18);
    return modelAndView;
}

视图hello.jsp

<%@ page contentType="text/html; charset=UTF-8" language="java" %>
<!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>hello</title>
</head>
<body>
    <h1>Hello,<%=request.getAttribute("name")%>,<%=request.getAttribute("age")%></h1>
</body>
</html>

我被ModelAndView深深吸引了,你呢?