1.前言
最近SSM框架开发web项目,用得比较火热。spring-MVC肯定用过,在请求处理方法可出现和返回的参数类型中,最重要就是Model和ModelAndView了,对于MVC框架,控制器Controller执行业务逻辑,用于产生模型数据Model,而视图View用于渲染模型数据。
使用Model和ModelAndView这两个类在spring的视图解析时作用以及区别。
这两者之间有着很大的区别,具体就表现在Model只是用来传输数据的,并不会进行业务的寻址。ModelAndView 却是可以进行业务寻址的,就是设置对应的要请求的静态文件,这里的静态文件指的是类似jsp的文件。
其次,两者还有一个最大的区别,那就是Model是每一次请求可以自动创建,但是ModelAndView 是需要我们自己去new的。
2.model方法
注意:如果在控制层上的方法声明了注解@ResponseBody ,则会直接将返回值输出到页面。
Model 是一个接口, 其实现类为ExtendedModelMap,继承了ModelMap类。

public class ExtendedModelMap extends ModelMap implements Model

一般来说,可以用model来接收各种类型的数据,如果使用来接收一组数据List 》》那么这个时候的model实际上是ModelMap。
3.ModelMap方法
ModelMap对象主要用于传递控制方法处理数据到结果页面,也就是说我们把结果页面上需要的数据放到ModelMap对象中即可,
他的作用类似于request对象的setAttribute方法的作用: 用来在一个请求过程中传递处理的数据。
ModelMap或者Model通过addAttribute方法向页面传递参数.
其中addAttribute方法参数有多种方式:
常用的有:写在java代码中

public ModelMap addAttribute(String attributeName, Object attributeValue){...}
public ModelMap addAttribute(Object attributeValue){...}
public ModelMap addAllAttributes(Collection<?> attributeValues) {...}
public ModelMap addAllAttributes(Map<String, ?> attributes){...}

然后在jsp页面上可以通过el表达式语言$attributeName或者是C标签库下的方法,来获取并展示modelmap中的数据。
modelmap本身不能设置页面跳转的url地址别名或者物理跳转地址.
那么我们可以通过控制器方法的字符串返回值来设置跳转url地址别名或者物理跳转地址。

4.ModelAndView方法
添加模型数据用addObject;
设置视图setViewName;
ModelAndView 对象有两个作用:
(1). 设置转向地址,这也是ModelAndView和ModelMap的主要区别.设置方式如下所示:

ModelAndView view = new ModelAndView("path:student");

或者通过setViewName方式:

public void setViewName(String viewName){...}

(2). 将控制器方法中处理的结果数据传递到结果页面,也就是把在结果页面上需要的数据放到ModelAndView对象中即可,其作用类似于request对象的setAttribute方法的作用,用来在一个请求过程中传递处理的数据。通过以下方法向页面传递参数:

public ModelAndView addObject(String attributeName, Object attributeValue){...}
public ModelAndView addObject(Object attributeValue){...}

在jsp中:也是可以通过el表达式语言attributeName或者C标签库的attributeName或者C标签库的{name } 来获取并展示ModelAndView中的数据。
5.使用示例
(1) Model 或者 ModelMap
Model 和 ModelMap 的实例都是spirng mvc框架来自动创建并作为控制器方法参数传入,用户无需自己创建。
而且需要return 返回指定的页面路径.

在控制层的java代码中写入:

 //传值方法一@RequestMapping("listCategory2")public String listCategory2(Model model) {// 接收查询的信息List<Category> cs2= categoryService.list();// 封装了查询的数据model.addAttribute("test", cs2);//重要!!需要给出返回model跳转的路径return "listCategory2";}

然后在jsp页面中写入:

<!-- 获取值的时候,对应的是addAttribute的第一个参数!取了个别名为c--><c:forEach items="${test }" var="c" varStatus="st"><tr><td>${c.id}</td><td>${c.name}</td></tr></c:forEach>

图示:
java:

jsp:

效果:

数据列表全部获取到!

(2) ModelAndView
ModelAndView的实例是需要我们手动new的,这也是和ModelMap的一个区别。
而且,ModelAndView 可以自己寻址,只需要return 返回其对象即可。

在控制层的java代码中写入:

//传值方法二:使用ModelAndView//当url处于这个时,由listCategory方法来处理请求@RequestMapping("listCategory")public ModelAndView listCategory(){//创建一个模型视图对象ModelAndView mav = new ModelAndView();//获取到查询的数据List<Category> cs= categoryService.list();// //将数据放置到ModelAndView对象view中,第二个参数可以是任何java类型mav.addObject("cs", cs);// 放入jsp路径mav.setViewName("listCategory");//返回ModelAndView对象mavreturn mav;}

在jsp页面中:

 <!-- 使用c标签库,循环遍历出数据 ,命名为c--><c:forEach items="${cs}" var="c" varStatus="st"><tr><td>${c.id}</td><td>${c.name}</td></tr></c:forEach>

图示:

jsp:

 <!-- 使用c标签库,循环遍历出数据 ,命名为c--><c:forEach items="${cs}" var="c" varStatus="st"><tr><td>${c.id}</td><td>${c.name}</td></tr></c:forEach>

图示:

jsp:

效果:
数据列表全部获取到!

以上就是两种不同的方式取值传值,从上面我们可以看得出来这两个之间还是有一定的区别的,记住有一个需要返回对象,一个需要返回的是地址路径。

Model、ModelMap和ModelAndView的使用详解相关推荐

  1. 前端接modelmap的list_Model、ModelMap和ModelAndView的使用详解

    Spring中Model,ModelMap以及ModelAndView之间的区别 1.场景分析 在许多实际项目需求中,后台要从控制层直接返回前端所需的数据,这时Model大家族就派上用场了. 2.三者 ...

  2. Diffusion Model (扩散生成模型)的基本原理详解(三)Stochastic Differential Equation(SDE)

    本篇是<Diffusion Model (扩散生成模型)的基本原理详解(二)Score-Based Generative Modeling(SGM)>的续写,继续介绍有关diffusion ...

  3. Spring MVC中的Model, ModelMap, 和ModelAndView

    1. 概述 在本文中,我们将介绍由弹簧MVC提供的核心组织弹簧框架,组织弹簧框架.. 2. Maven依赖关系 让我们从pom.xml文件中的弹簧上下文依赖关系开始: <dependency&g ...

  4. springmvc之ModelAndView的使用详解

    一.前言 ModelAndView类用来存储处理完后的结果数据,以及显示该数据的视图,其中Model代表模型,View代表视图.业务处理器调用模型层处理完用户请求后,把结果数据存储在该类的model属 ...

  5. Model,ModelMap和ModelAndView的简单使用说明

    在许多实际项目需求中,后台要从控制层直接返回前端所需的数据,这时Model大家族就派上用场了.有其三任意一个,说明返回请求走了视图解析器. Model Model是一个接口,它的实现类为Extende ...

  6. Spring中Model,ModelMap以及ModelAndView之间的区别

    1.场景分析 在许多实际项目需求中,后台要从控制层直接返回前端所需的数据,这时Model大家族就派上用场了. 2.三者区别 ①Model Model是一个接口,它的实现类为ExtendedModelM ...

  7. Diffusion Model (扩散生成模型)的基本原理详解(一)Denoising Diffusion Probabilistic Models(DDPM)

    本章开始笔者来陆续的介绍最近爆火的Diffusion Model的近期发展. 本篇的学习内容与图片均来自于对文章Diffusion Models: A Comprehensive Survey of ...

  8. SpringMVC的Model、Model Map、ModelAndView

    一直都在用Model设置属性用于前后端传值. 今天在使用@RestController时,使用了ModelAndView传值并返回试图. 1.Model model一般用于前后端传值. model不能 ...

  9. 前端接modelmap的list_SpringMVC - 数据怎么从后端到前端?Model, ModelMap, ModelAndView

    总结 SpringMVC在调用方法前会创建一个隐含的数据模型(Model,ModelMap),作为模型数据的存储容器, 成为"隐含模型". 如果controller方法的参数为Mo ...

最新文章

  1. 线索二叉树(c/c++)
  2. 传入json对象_【Python基础】可迭代对象amp;迭代器对象及其实现
  3. 新一代软件工程的标配:持续集成
  4. [Socket网络编程]一个封锁操作被对 WSACancelBlockingCall 的调用中断。
  5. 跟我一起学.NetCore之Asp.NetCore中集成Autofac扩展
  6. FZU - 2042 The Mad Mathematician 数位dp + 算贡献
  7. arm adb build
  8. Python:anaconda3/bin/activate: Permission denied
  9. 常见Web安全漏洞及防范
  10. 配置Syslog输出到远程日志服务器
  11. CAD将图形输出成png图片的三种方法
  12. PDF怎么转图片?建议收藏这些方法
  13. Flash Magic使用
  14. 数论之指标介绍及其应用(基于阶与原根的应用)
  15. nemo 替换ubuntu 自带的文件管理器
  16. nestjs入门(controller,service,module)
  17. [USACO 2007 Jan S]Protecting the Flowers
  18. 数学学科的总体架构是什么?
  19. 单量子门与受控非门构建任意门与受控非门构建任意酉矩阵量子运算门的方法
  20. matlab计算不同时间步长,Matlab ODE求解器中的时间步长计算

热门文章

  1. lr监控mysql_LR通过SiteScope监控mysql
  2. 南京师范大学874计算机答案,2017年南京师范大学电气与自动化工程学院874电路考研题库...
  3. 鸿蒙后的时期有什么,鸿蒙系统什么时候上市 华为鸿蒙系统有多厉害?
  4. 聊聊LightProbe原理实现以及对LightProbe数据的修改
  5. 双稳态继电器工作原理图_固态继电器只有单一的作用吗?带你了解不一样的固态继电器...
  6. Python基础-os模块 sys模块
  7. Centos7.2源码安装redis
  8. rest_framework中的url注册器,分页器,响应器
  9. 关于Keychain
  10. Java Web 九大内置对象(一)