使用ModelAndView类用来存储处理完后的结果数据,以及显示该数据的视图。从名字上看ModelAndView中的Model代表模型,View代表视图,这个名字就很好地解释了该类的作用。
业务处理器调用模型层处理完用户请求后,把结果数据存储在该类的model属性中,把要返回的视图信息存储在该类的view属性中,然后让该ModelAndView返回该Spring MVC框架。框架通过调用配置文件中定义的视图解析器,对该对象进行解析,最后把结果数据显示在指定的页面上。
它既能返回视图(html页面), 还能携带该html页面所需要的数据,只要把html页面连同数据一起返回给前端,我们后端的工作就结束了。
知道了它强大的功能,下面解析一下该如何使用。
首先它是如何返回视图的?
一个ModelAndView只能返回一个html页面,你只需要把html页面的名字给ModelAndView就可以了。
例如我想打开home.html页面: ModelAndView.setViewName(“home”)
其次它如何携带数据?
它有很多函数,其中最好用的就是addObject(name,object ),把你想要传到前端的object起一个名字,在前端就可以根据你起的名字获得这个object。
它可以携带很多数据,但是注意起名不能重复。
通过ModelAndView构造方法可以指定返回的页面名称,也可以通过setViewName()方法跳转到指定的页面 , 使用addObject()设置需要返回的值,addObject()有几个不同参数的方法,可以默认和指定返回对象的名字。
========================================
一,ModelAndView 介绍:
1)ModelAndView 用于后台与前端页面交互;
2)可以用于重定向与转发到指定页面,
3)可以保存数据然后渲染到页面
二,使用:
1)在Controller层的方法返回值写为ModelAndView
2)在方法内 new一个 ModelAndView
3)给ModelAndView 赋值
4)返回ModelAndView
三,常用返回类型与页面渲染方法:
1)返回值
// List List<String> list = new ArrayList<String>(); list.add("张三"); list.add("李四"); list.add("王五"); mav.addObject("userList", list); // Map Map<String, String> map = new HashMap<String, String>(); map.put("zhangsan", "张三"); map.put("lisi", "李四"); map.put("wangwu", "王五"); mav.addObject("map", map);
2)页面
//list <%@ prefix="c" taglib uri="http://java.sun.com/jsp/jstl/core" %> <c:forEach items="${userList}" var="u"> <c:out value="${u}"></c:out> </c:forEach> //map <c:forEach items="${map}" var="n"> <c:out value="${n.value}"></c:out> </c:forEach>
四,Springmvc配置:
<!-- 视图解析器 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/" /> <!-- prefix用于给返回的视图名之前添加路径,例如返回index, 那就在项目的根路径下加上 /index (如果项目路径是:http://localhost:8080/portal) 那么返回的路径就是:http://localhost:8080/portal/index --> <property name="suffix" value=".jsp" /> <!-- suffix用于给返回的视图名之前添加后缀,例如返回index, 那么返回的路径就是:http://localhost:8080/portal/index.jsp --> </bean>
========================================
========================================
REF
https://blog.csdn.net/qq_40774175/article/details/87932825
https://www.cnblogs.com/alsf/p/9134589.html