Model,ModelMap,ModelAndView之间的作用和区别

1.背景

在项目中很多的时候是需要后台控制层直接返回数据到前台的,这时候就是他们出场的时候了

2.区别

Model
Model是一个接口,实现了他的有RedirectAttributes,ConcurrentModel,ExtendedModelMap
其中实现类ExtendedModelMap继承了ModelMap

ModelMap
ModelMap 继承了 LinkedHashMap Spring框架自动创建实例作为Controller的入参,用户无需自己创建

ModelAndView
ModelAndView 如名所示,指的是模型和视图的集合,实例是开发者自己去创建的

3.作用

model

用来传递数据,并不会进行业务的寻址,每次请求中都存在的默认参数,利用其addAttribute()方法即可将服务器的值传递到前台

示例:

@Controller
public class DemoController {
    @RequestMapping(method = RequestMethod.POST, value = "/demo")
    public String demoMethod(Model model) {
        //用来作为数据的map
        Map map = new HashMap();
        map.put("userName", "zhangsan");
        map.put("address", "北京");
        map.put("password", "123456");
        model.addAllAttributes(map);
        return "demo";
    }
}

ModelMap

用于传递控制方法处理结果数据到结果页面,用来在一个请求过程中传递处理的数据。通过以下方法向页面传递参数:
addAttribute(String key,Object value);
在页面上可以通过el变量方式$key或者bboss的一系列数据展示标签获取并展示modelmap中的数据。
modelmap本身不能设置页面跳转的url地址别名或者物理跳转地址,那么我们可以通过控制器方法的返回值来设置跳转url地址别名或者物理跳转地址。

示例

@Controller
public String DemoController (ModelMap model)   
{   

    //...  
    model.addAttribute("key","123123");   
    //...   
    //返回跳转地址   
    return "demo";   
}  

ModelAndView

ModelAndView用于这里写代码片设置转向地址(这也是ModelAndView和ModelMap的主要区别)

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

和传递处理的数据,因为传递控制方法处理结果数据到结果页面,也就是说我们把需要在结果页面上需要的数据放到ModelAndView对象中即可,

addObject(String key,Object value); 

示例

@Controller
public String DemoController (ModelMap model)   
{   

    //...  
    //创建实例并设置跳转地址
    ModelAndView view = new ModelAndView("demo");   
    //将数据放入ModelAndView中
    view.addObject("key","123123");   
    //...   
    return view;   
} 

// 也可以偷下懒  -  -
// 像下面这样


@Controller
public String DemoController (ModelMap model)   
{   

    return new ModelAndView("demo").addObject("key","123123"); 
}

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

总结:

之前就是一直在用也没有一个客观的去看一下这些东西,今天正好看了看做个总结以备以后的巩固和朋友的学习,总的来说就是其实Model,ModelMap,ModelAndView每个都有自己的作用都有自己的一个特性,如果仅仅是使用的话当然是看自己顺手了,如果实际出发的话就只能再往低挖了,以上所述也只是个皮毛,欢迎大牛前来指导

猜你喜欢

转载自blog.csdn.net/Strugglein/article/details/80281112
今日推荐