一、区别
ModelAndView | 1、需要我们自己手动new来创建 2、可以传输数据和进行业务寻址的 |
Model | 1、每一次请求可以自动创建 2、只能用来传输数据,并不会进行业务的寻址 |
ModelMap | ModelMap和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地址别名或者物理跳转地址。