spring MVC(三)数据传递中Model、ModelMap、ModelAndView之间的区别

一、区别

ModelAndView

1、需要我们自己手动new来创建

2、可以传输数据和进行业务寻址的

Model

1、每一次请求可以自动创建

2、只能用来传输数据,并不会进行业务的寻址

ModelMapModelMap和Model的用法一样,只不过model的实现类是继承了ModelMap


二、ModelAndView

这个对象可以做两件事 ,既包含模型 又包含视图

1、可以通过setViewName()指定跳转的地址

2、并且通过addObject()方法将目标所需要的数据通过request方式发送过去

    @RequestMapping("/data")
    public ModelAndView demo(){
        ModelAndView mav = new ModelAndView();//模型和视图对象
        mav.addObject("data","数据:张三");//设置数据到前台
 
        User u = new User();
        u.setUsername("李四");
        mav.addObject(u);//添加模型数据,key的值默认生成为对象的类型首字母小写   ex:User-->user
 
        mav.setViewName("/test.jsp");//添加跳转的路径,默认为forward
        return mav;
    }

 

三、Model

Model是一个接口,它的实现类为ExtendedModelMap,继承ModelMap类

public class ExtendedModelMap extends ModelMap implements Model

一般来说,可以用model来接收各种类型的数据,如果使用来接收一组数据List,那么这个时候的model实际上是ModelMap 

注意:如果在控制层上的方法声明了注解@ResponseBody ,则会直接将返回值输出到页面。

    @RequestMapping("/data1")
	public String demo1(Model model){
		model.addAttribute("data","数据:李四");//设置数据到前台
		User u = new User();
		u.setUsername("张三");
		//添加模型数据,key的值默认为对象的类型首字母小写   ex:User-->user
		model.addAttribute(u);
		model.addAttribute("message","这是一个消息");
		return "test.jsp";
	}

 

四、ModelMap

ModelMap继承LinkedHashMap,spring框架自动创建实例并作为controller的入参,用户无需自己创建

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){...}

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值