先来看一下,ModelAndView的构造方法,其实用的也就两种,
有String参数的两种
构造方法摘要
ModelAndView() 默认构造函数豆式的用法:在构造函数参数填充通过bean属性代替。
ModelAndView(java.lang.String viewName) 方便在没有构造模型数据暴露。
ModelAndView(java.lang.String viewName, java.util.Map model) 创建新的视图名称ModelAndView的给予和模型。
ModelAndView(java.lang.String viewName, java.lang.String modelName, java.lang.Object modelObject) 方便的构造采取单一的模式对象。
ModelAndView(View view) 方便在没有构造模型数据暴露。
ModelAndView(View view, java.util.Map model) 创建新的ModelAndView给予视图对象和模型。
ModelAndView(View view, java.lang.String modelName, java.lang.Object modelObject) 方便的构造采取单一的模式对象。
这是三个方法,用来加model,一般都不用,
注意一下,第二种方法,直接加入object,会默认加入string,因为他们的本质还是Map;
直接放入对象。属性名为”首字母小写的类名”
addAllObjects(java.util.Map modelMap) 新增模式。
addObject(java.lang.Object attributeValue) 将属性添加到模型中使用的参数名生成。
addObject(java.lang.String attributeName, java.lang.Object attributeValue) 添加一个属性到模型中。
关于返回值的一些体会:
其实我感觉,返回的都是map,不论哪种形式,都是向map转换,还不如直接用map;
map,modelMap,Model都是一个意思,
这里有一个小实验,参考别人做的:
<span style="font-size:18px;"> ModelMap modelMap=new ModelMap(); modelMap.addAttribute("yunyun","xiao yun yun"); Map<String,Object> map=new HashMap<String,Object>(); map.put("yunyun", "xiao fa de"); request.setAttribute("yunyun", "laopo");</span>
<span style="font-size:18px;"> </span>
<span style="font-size:18px;"> return new ModelAndView("haha",map) ; </span>
“yunyun”属性的获取,优先获取map中的,并不是request中的。<body> hhahhha. -------------${yunyun}<br> </body>
别的就没做测试了,直接给出结论:
优先取Model和ModelMap的,Model和ModelMap是同一个东西,谁最后赋值的就取谁的,然后是request,最后是从session中获取