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

来源:互联网 发布:网络电爱录音沈婷 编辑:程序博客网 时间:2024/05/17 23:20

1. Model

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

public class ExtendedModelMap extends ModelMap implements Model
  • 1

2.ModelMap

ModelMap的声明格式:

public class ModelMap extends LinkedHashMap<String, Object>
  • 1

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){...}
  • 1
  • 2
  • 3
  • 4

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

3.ModelAndView

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

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

或者通过setViewName方式:

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

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

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

在页面上也是可以通过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";}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

(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;}Spring MVC 向页面传值-Map、Model和ModelMap

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

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

 

Java代码

复制代码
1 @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 }

 

 

结果:


 
阅读全文
0 0
原创粉丝点击