首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SpringMVC框架中ModelAndView、Model的区别与使用

SpringMVC框架中ModelAndView、Model的区别与使用

作者头像
Java编程指南
发布2019-08-02 16:19:17
1.5K0
发布2019-08-02 16:19:17
举报
文章被收录于专栏:Java编程指南Java编程指南

1. Model

Model 是一个接口, 其实现类为ExtendedModelMap,继承了ModelMap类。

public class ExtendedModelMap extends ModelMap implements Model

2.ModelMap

ModelMap的声明格式:

public class ModelMap extends LinkedHashMap<String, Object>

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

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

3.ModelAndView

ModelAndView对象有两个作用: (1). 设置转向地址,这也是ModelAndView和ModelMap的主要区别.设置方式如下所示:

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

或者通过setViewName方式:

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

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

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

public ModelAndView addObject(Object attributeValue){...}

在页面上也是可以通过el表达式语言$attributeName等系列数据展示标签获取并展示ModelAndView中的数据。

4. 使用方式如下:

(1) ModelMap ModelMap的实例是spirng mvc框架自动创建并作为控制器方法参数传入,用户无需自己创建。

public String xxxxmethod(String someparam,ModelMap model)
{
     //省略方法处理逻辑若干
     //将数据放置到ModelMap对象model中,第二个参数可以是任何java类型
      model.addAttribute("key",someparam);
         ......
     //返回跳转地址
      return "path:handleok";
}

(2) ModelAndView ModelAndView的实例是由用户手动创建的,这也是和ModelMap的一个区别。

public ModelAndView xxxxmethod(String someparam)
{
     //省略方法处理逻辑若干
      //构建ModelAndView实例,并设置跳转地址
      ModelAndView view = new ModelAndView("path:handleok");
      //将数据放置到ModelAndView对象view中,第二个参数可以是任何java类型
      view.addObject("key",someparam);
    ......
     //返回ModelAndView对象view
      return view;
}

除了使用ModelAndView方式外。还可以使用Map、Model和ModelMap来向前台页面创造

  使用后面3种方式,都是在方法参数中,指定一个该类型的参数。例如:

Java代码

@RequestMapping("/test")
2 public String test(Map<String,Object> map,Model model,ModelMap modelMap){
3 
4     map.put("names", Arrays.asList("caoyc","zhh","cjx"));
5     model.addAttribute("time", new Date());
6     modelMap.addAttribute("city", "ChengDu");
7     modelMap.put("gender", "male");
8     return "hello";
9 }

JSP页面

1 1、time:${requestScope.time}
2 <br/>2、names:${requestScope.names }
3 <br/>3、city:${requestScope.city }
4 <br/>4、gender:${requestScope.gender }

结果:

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-01-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Java编程指南 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Model 是一个接口, 其实现类为ExtendedModelMap,继承了ModelMap类。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档