Model、ModelMap和ModelAndView的使用详解

Model、ModelMap和ModelAndView的使用详解1.前言最近SSM框架开发web项目,用得比较火热。spring-MVC肯定用过,在请求处理方法可出现和返回的参数类型中,最重要就是Model和ModelAndView了,对于MVC框架,控制器Controller执行业务逻辑,用于产生模型数据Model,而视图View用于渲染模型数据。使用Model和ModelAndView这两个类在spring的视图解析时作用以及区别。这两者之间…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

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表达式语言 a t t r i b u t e N a m e 或 者 C 标 签 库 的 attributeName或者C标签库的 attributeNameC{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:
java代码
jsp:
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对象mav
		return 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:
这里写图片描述

效果:
这里写图片描述

数据列表全部获取到!

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


You got a dream, you gotta protect it.
如果你有梦想的话,就要去捍卫它 。 ——《当幸福来敲门》

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/160983.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 苹果系统自带的计算机怎么恢复出厂设置,苹果电脑MacBook如何将系统恢复出厂设置…

    苹果系统自带的计算机怎么恢复出厂设置,苹果电脑MacBook如何将系统恢复出厂设置…‍有时候在使用电脑的过程中会出现问题,需要进行恢复出厂设置的操作。如果使用的是苹果电脑MacBookAir,那么具体应该怎么操作呢?大家不妨参考接下来介绍的具体方法。1、首先开启Mac的电源开关,同时按住command+R键进入恢复模式,就可以看到MacOSX实用工具;2、选择磁盘工具–然后选择上面一般是MacintoshHD这个选项,右侧选择抹掉,意思就是删除所有内容重新安装新的系统;…

  • BigDecimal保留两位小数_java bigdecimal保留两位小数

    BigDecimal保留两位小数_java bigdecimal保留两位小数//四舍五入BigDecimalvalue=newBigDecimal(object.toString()).setScale(2,BigDecimal.ROUND_HALF_UP);//不足两位小数补0DecimalFormatdecimalFormat=newDecimalFormat(“0.00#”);…

  • 二进制实现加法_递归实现十进制转换二进制

    二进制实现加法_递归实现十进制转换二进制一、原理1、化简先看一个例子:看一下3+4的加法运算3的二进制表示:0114的二进制表示:1003^4(3按位异或4)的结果是:111=>7上面的到的结果是

  • android反编译apk_apk反编译找不到

    android反编译apk_apk反编译找不到反编译代码:1、解压apk得到class.dex2、dex2jar.bat class.dex3、用Javadecompiler查看编译出来的*.jar文件就可以看到代码反编译资源文件:1、apktool.bat d *.apk  APKTool是GOOGLE提供的APK编译工具,需要JAVA运行环境,推荐使用JDK

  • treetable怎么带参数_好用的TreeTable插件

    treetable怎么带参数_好用的TreeTable插件插件描述:实现layui的树形表格treeTable,对layui数据表格进行扩展。注:加载了外部json数据文件,本地预览会有跨域问题,需要在服务端运行。treetable-lay实现layui的树形表格treeTable1.简介在layui数据表格之上进行扩展实现。2.使用方法2.1.引入模块下载module/treetable-lay整个文件夹,放在你的项目里面,然后使用模块加载的方式使用:…

  • db2查看数据库端口

    (1)查询数据库管理器配置参数,查找到端口名[test88:dsadm:/gpfsetl/etldata/lch]db2getdbmcfg|grepSVCENAME TCP/IPServicename                         (SVCENAME)=DB2_dsadm SSLservicename                       …

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号