Model、ModelMap、ModelAndView的区别

本文介绍了SpringMVC中的Model、ModelMap和ModelAndView的区别。Model和ModelMap用于向页面传递数据,由SpringMVC自动创建,而ModelAndView需要手动创建并能指定跳转的视图名。ModelAndView提供了设置视图和数据的方法,可以直接作为控制器返回值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Model

Model是org.springframework.ui包中一个接口,定义的方法如下:
在这里插入图片描述其实现类为ExtendedModelMap,继承了ModelMap类,实现了Model接口

public class ExtendedModelMap extends ModelMap implements Model

ModelMap

ModelMap是org.springframework.ui包下的一个类,继承了LinkedHashMap<String, Object>,其方法如下:
在这里插入图片描述Model和ModelMap均用于向页面传递数据,两者通过addAttribute()和addAllAttribute()方法加入需要传递的值,Model和ModelMap传入的值是以key-value形式传入的,前端页面如果要使用数据则使用el表达式语言(${key}),其本质都是使用Request对象向jsp传递数据(request.setAttribute(key,value))。

Model和ModelMap是由SpringMVC自己创建的,如果需要在控制器方法中使用Model和ModelMap只需要在参数中加入Model或ModelMap即可。

Model和ModelView只用于向页面传递数据,不能指定需要跳转的页面,所以引入了Model或ModelView的方法需要返回String,用来表示视图的位置。

在这里插入图片描述

ModelAndView

ModelAndView是org.springframework.web.servlet包下的类,它定义了三个属性,分别为:
在这里插入图片描述其中view是需要跳转的视图名,model用于保存需要向页面传递的数据。

ModelAndView需要自己手动创建(即自己new),通过addObject()、addAllObjects()方法添加需要传入的数据,使用setViewName()或setView()来定义视图名称。

ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("goodsList",list);
modelAndView.setViewName("show");

ModelAndView可以直接作为控制器方法的返回值:

public class MyExceptionResolver implements HandlerExceptionResolver{
    public ModelAndView resolveException(HttpServletRequest httpServletRequest,
                                         HttpServletResponse httpServletResponse, Object o, Exception e) {
        MyException ex = null;
        //对异常进行处理
        if(e instanceof MyException){
            ex = (MyException) e;
        }else {
            ex = new MyException("系统正在维护...");
        }

        //设定返回页面和数据
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("errorMsg",ex.getErrorMsg());
        modelAndView.setViewName("error");

        return modelAndView;
    }
}

总结

ModelAndView和Model/ModelMap的区别:

  1. Model/ModelMap由SpringMVC自动创建,而ModelAndView需要手动创建
  2. Model/ModelMap不能指定需要跳转的视图地址,需要在控制器的返回值中设定;而ModelAndView可以指定视图名,直接返回ModelAndView实例即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值