Map、Model、ModelMap和ModelAndView解释

    Spring MVC 可以使用Map、Model和ModelMap、ModelAndView来向前台页面传值

Map、Model和ModelMap解释:

1Spring MVC在调用方法前会创建一个隐含的模型对象作为模型数据的存储容器。

2.如果方法的入参为Map,Model和ModelMap类型,Spring MVC会将隐含模型的引用传递给这些入参。在方法体内,开发者可以通过这个入参对象访问到模型中的所有数据,也可以向模型中添加新的属性数据,作用类似于request对象的setAttribute方法的作用: 用来在一个请求过程中传递处理的数据


//控制层

@RequestMapping("/testmap")
	public String testmap(Map<String,Object> map) {
		map.put("age", 13);
		return "success";
	}
	@RequestMapping("/testModel")
	public String testModel(Model model) {
		model.addAttribute("email","ddd@qq.com");
		return "success";
	}
	@RequestMapping("/testModelmap")
	public String testModelmap(ModelMap modelMap) {
		modelMap.addAttribute("city", "Beijing");
		return "success";
	}
//前台页面通过el表达式语言 $attributeName 或者是C标签库下的方法,来获取并展示modelmap中的数据

${requestScope.age }
${requestScope.email}
${requestScope.city}

效果:
在这里插入图片描述
Map、Model、ModelMap三种方式处理模型数据:

1.Map .put(string,object);

2.Model .AddAttribute(string,object);

3.ModelMap .AddAttribute(string,object);

ModelMap处理模型数据:

1.添加模型数据用
ModelMap .addObject;
2.设置视图
ModelMap .setViewName;



====================================================================

1.介绍

    在请求处理方法可出现和返回的参数类型中,最重要就是Model和ModelAndView了,对于MVC框架,控制器Controller执行业务逻辑,用于产生模型数据Model,而视图View用于渲染模型数据。

使用Model和ModelAndView这两个类在spring的视图解析时有着很大的区别,具体就表现在Model只是用来传输数据的,并不会进行业务的寻址。
ModelAndView 却是可以进行业务寻址的,就是设置对应的要请求的静态文件即请求地址,这里的静态文件指的是类似jsp的文件。

其次,两者还有一个最大的区别,那就是Model是每一次请求可以自动创建,但是ModelAndView 是需要我们自己去new的。

2.model方法

注意:如果在控制层上的方法声明了注解@ResponseBody ,则会直接将返回值输出到页面。
    一般来说,可以用model来接收各种类型的数据,如果使用来接收一组List 数据》》那么这个时候的model实际上是ModelMap。
Model 是一个接口, 其实现类为ExtendedModelMap,继承了ModelMap类。

public class ExtendedModelMap extends ModelMap implements Model

3.ModelMap方法

    ModelMap对象主要用于传递控制方法处理数据到结果页面,也就是说我们把结果页面上需要的数据放到ModelMap对象中即可,
他的作用类似于request对象的setAttribute方法的作用: 用来在一个请求过程中传递处理的数据。

modelmap本身不能设置页面跳转的url地址别名或者物理跳转地址.
那么我们可以通过控制器方法的字符串返回值来设置跳转url地址别名或者物理跳转地址

ModelMap或者Model通过addAttribute方法向页面传递参数.
其中addAttribute方法参数有多种方式:
常用的有:

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

4.ModelAndView方法

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

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>

效果:在这里插入图片描述
(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>

效果:
在这里插入图片描述

结论:

    Map、Model和ModelMap需要返回的是地址路径,ModelAndView需要返回对象且需要new。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ModelModelMapModelAndView是Spring MVC框架中用于返回数据给前端页面的三种方式。它们的主要区别在于返回数据的类型和使用方法。 1. Model Model是Spring MVC框架中最基本的返回数据类型,它是一个接口,用于存储返回给前端页面的数据。在Controller中,可以通过方法参数中添加Model类型的参数来将数据传递给前端页面。 例如: ``` @RequestMapping("/index") public String index(Model model) { String message = "Hello, World!"; model.addAttribute("message", message); return "index"; } ``` 在这个例子中,我们将一个名为message的字符串添加到了Model中,并将其返回给了名为index的页面。在前端页面中,我们可以通过${message}来获取这个值。 2. ModelMap ModelMap也是用于存储返回给前端页面的数据的一种类型,它实现了Model接口。与Model不同的是,ModelMap还可以添加多个属性。在Controller中,可以通过方法参数中添加ModelMap类型的参数来将数据传递给前端页面。 例如: ``` @RequestMapping("/index") public String index(ModelMap model) { String message = "Hello, World!"; model.addAttribute("message", message); model.addAttribute("name", "John"); return "index"; } ``` 在这个例子中,我们将两个值分别为"Hello, World!"和"John"的属性添加到了ModelMap中,并将其返回给了名为index的页面。在前端页面中,我们可以通过${message}和${name}来获取这些值。 3. ModelAndView ModelAndView是一种包含ModelView的数据类型,它用于同时返回数据和页面。在Controller中,可以通过创建一个新的ModelAndView对象来将数据和页面一起返回给前端页面。 例如: ``` @RequestMapping("/index") public ModelAndView index() { String message = "Hello, World!"; ModelAndView modelAndView = new ModelAndView("index"); modelAndView.addObject("message", message); return modelAndView; } ``` 在这个例子中,我们创建了一个名为modelAndViewModelAndView对象,并将一个名为message的字符串添加到了Model中。最后,我们将这个对象返回给了名为index的页面。在前端页面中,我们可以通过${message}来获取这个值。 总的来说,ModelModelMapModelAndView都是用于返回数据给前端页面的三种方式。它们的主要区别在于返回数据的类型和使用方法。在实际开发中,我们可以根据具体需求选择合适的方式来返回数据给前端页面。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值