1.Model
Model 是一个接口, 其实现类为 ExtendedModelMap,继承了 ModelMap 类。
public class ExtendedModelMap extends ModelMap implements Model
2.ModelMap
ModelMap 的声明格式:
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){...}
在页面上可以通过 el 表达式语言 $attributeName 等系列数据展示标签获取并展示 modelmap 中的数据。
modelmap 本身不能设置页面跳转的 url 地址别名或者物理跳转地址,那么我们可以通过控制器方法的字符串返回值来设置跳转 url 地址别名或者物理跳转地址。
3.ModelAndView
ModelAndView 对象有两个作用:
(1). 设置转向地址, 这也是 ModelAndView 和 ModelMap 的主要区别. 设置方式如下所示:
ModelAndView view = new ModelAndView("path:ok");
或者通过 setViewName 方式:
public void setViewName(String viewName){...}
(2). 将控制器方法中处理的结果数据传递到结果页面,也就是把在结果页面上需要的数据放到 ModelAndView 对象中即可,其作用类似于 request 对象的 setAttribute 方法的作用,用来在一个请求过程中传递处理的数据。通过以下方法向页面传递参数:
public ModelAndView addObject(String attributeName, Object attributeValue){...}public ModelAndView addObject(Object attributeValue){...}
在页面上也是可以通过 el 表达式语言 $attributeName 等系列数据展示标签获取并展示 ModelAndView 中的数据。
4.使用方式如下:
(1) ModelMap
ModelMap 的实例是 spirng mvc 框架自动创建并作为控制器方法参数传入,用户无需自己创建。
public String xxxxmethod(String someparam,ModelMap model){
(2) ModelAndView
ModelAndView 的实例是由用户手动创建的,这也是和 ModelMap 的一个区别。
public ModelAndView xxxxmethod(String someparam){