SpringMVC中model,modelMap和modelAndView的区别

ModelMap[Model]和ModelAndView的作用

model

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

ModelMap

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

ModelAndView

ModelAndView对象有两个作用:

  • 1.作用一 设置转向地址,如下所示(这也是ModelAndView和ModelMap的主要区别)
    ModelAndView view = new ModelAndView(“path:ok”);

  • 2.作用二 用于传递控制方法处理结果数据到结果页面,也就是说我们把需要在结果页面上需要的数据放到ModelAndView对象中即可,他的作用类似于request对象的setAttribute方法的作用,用来在一个请求过程中传递处理的数据。通过以下方法向页面传递参数:
    addObject(String key,Object value);

在页面上可以通过el变量方式$key或者bboss的一系列数据展示标签获取并展示ModelAndView中的数据

ModelMap[Model]和ModelAndView区别:

Model只是用来传输数据的,并不会进行业务的寻址。

ModelAndView却是可以进行业务寻址的,就是设置对应的要请求的静态文件,这里的静态文件指的是类似jsp的文件。

两者还有一个最大的区别,那就是Model是每一次请求都必须会带着的,但是ModelAndView是需要我们自己去新建的.

@RequestMapping(value = "/mergeModel")  
public ModelAndView mergeModel(Model model) { 
    //model是每一次请求都必须会带着的 
    model.addAttribute("a", "a");//①添加模型数据  
    ModelAndView mv = new ModelAndView("success");  
    //ModelAndView是需要我们自己去新建的
    mv.addObject("a", "update");//②在视图渲染之前更新③处同名模型数据  
    model.addAttribute("a", "new");//③修改①处同名模型数据  
    //视图页面的a将显示为"update" 而不是"new"  
    return mv;  
}  

使用方法:

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

public String xxxxmethod(String someparam,ModelMap model)
{
     //省略方法处理逻辑若干

        String retVal = "user/index";  
        User user = new User();  
        user.setName("XXX");  
        model.addAttribute("user", user);  
        //将数据放置到ModelMap对象model中,第二个参数可以是任何java类型
        return retVal;  
        //通过addAttribute()添加属性,在前端用${xxx.xx}调用
}

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

public ModelAndView xxxxmethod(String someparam)
{
     //省略方法处理逻辑若干
      //构建ModelAndView实例,并设置跳转地址
      ModelAndView view = new ModelAndView("path:handleok");
      //将数据放置到ModelAndView对象view中,第二个参数可以是任何java类型
      /** 
     * Model一个模型对象, 
     * 主要包含spring封装好的model和modelMap,以及java.util.Map, 
     * 当没有视图返回的时候视图名称将由requestToViewNameTranslator决定;  
     * 响应的view应该也是该请求的view。等同于void返回。 
     */  
    @RequestMapping(value="/index3",method=RequestMethod.GET)  
    public Map<String, String> index3(){  
        Map<String, String> map = new HashMap<String, String>();  
        map.put("1", "1");  
        //map.put相当于request.setAttribute方法  
        return map;  
}

java.util.Map

@RequestMapping("/login")  
public ModelAndView  login(String name,String pass){  
    User user = userService.login(name,pwd);  
    Map<String,Object> data = new HashMap<String,Object>();  
    data.put("user",user);  
    return new ModelAndView("success",data);  
}

/** 
     * Model一个模型对象, 
     * 主要包含spring封装好的model和modelMap,以及java.util.Map, 
     * 当没有视图返回的时候视图名称将由requestToViewNameTranslator决定;  
     * 响应的view应该也是该请求的view。等同于void返回。 
     */  
    @RequestMapping(value="/index3",method=RequestMethod.GET)  
    public Map<String, String> index3(){  
        Map<String, String> map = new HashMap<String, String>();  
        map.put("1", "1");  
        //map.put相当于request.setAttribute方法  
        return map;  
    }  
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值