Spring MVC 提供了以下几种途径输出模型数据
1.ModelAndView:
处理方法返回值类型为ModelAndView时,方法体即可通过该对象添加模型数据
既包含视图信息,也包含模型数据信息。
ModelAndView中包含两个添加数据模型的方法:
1.ModelAndView addObject(String attributeName, Object attributeValue)
2.ModelAndView addAllObject(Map<String,?>modelMap)
ModelAndView包含两个设置视图的方法:
1.void setView(View view)
2.void setViewName(String viewName)
实例:
@RequestMapping(value="testModelAndView")
public ModelAndView testModelAndView () {
System.out.println("entry in ModelAndView");
ModelAndView mv = new ModelAndView();
mv.setViewName("success");
// ModelAndView中模型数据的值,都是放置到request范围中的
mv.addObject("name", "MIKE");
return mv;
}
success.jsp中:
${requestScope.name}显示输出
注意事项:
核心业务方法的返回值为ModelAndView:模型数据,视图
ModelAndView当中模型数据是放置到请求范围当中的
2.Map及Model:
入参为org.springframework.ui.Model/org.springframework.ui.ModelMap或java.util.Map时,
处理方法返回时,Map中的数据会自动添加到模型中。
具体步骤:
SpringMVC 在调用方法前会创建一个隐含的模型对象作为模型数据的存储容器
如果方法的入参为Map或Model类型,SpringMVC会将隐含模型的引用传递给入参。
在方法体内,可以通过这个入参对象访问到模型中的所有数据,
也可以向模型中添加新的属性数据
使用方法:
Map.put(String , Object)
Model.addAttribute(String , Object)
ModelMap.addAttribute(String, Object)
实例:
Map:
@RequestMapping(value="/testMap")
public String testMap(Map<String,Object>map) {
map.put("age", 12);
return "success";
}
Model:
@RequestMapping(value="/testModel")
public String testModel(Model model) {
model.addAttribute("email", "[email protected]");
return "success";
}
ModelMap:
@RequestMapping(value="/testModelMap")
public String testModelMap(ModelMap modelMap) {
modelMap.addAttribute("city", "wuhan");
return "success";
}
3.@SessionAttributes:
将模型中的某个属性暂存到HttpSession中,以便多个请求之间可以共享这个属性。
@SessionAttributes除可以通过属性名指定需要放到会话中的属性外,还可以通过
模型属性的对象类型指定哪些模型属性需要放到会话中
@SessionAttributes(type=User.class)
会将隐含模型中所有类型为User.class的属性添加到会话中
@SessionAttributes(value={"user1", "user2"})
@SessionAttributes(types={User.class, Dept.class})
@SessionAttributes(value={"user1", "user2"}, types={Dept.class})
注意事项:
1.要求放置的值,必须在模型数据里面(request范围中有限)
2.复制的方式:
通过属性的key值完成session的共享数据设置
value:String[]
value=["a","b"]
也可以通过模型数据当中的类型,共享数据的设置
4.@ModelAttribute:
1.在方法定义上使用@ModelAttribute注解:
SpringMVC 在调用目标处理方法前,会逐个调用在方法级上标注了@ModelAttribute的方法
1.1 修饰没有返回值的方法
执行ModelAttribute修饰方法
获取的原始数据放置到请求范围中指定key对应的value
pojo入参会从请求范围当中查找指定key对应的value,找到的话,会将值赋给入参
前端用户输入的值与入参进行绑定
实例:
@ModelAttribute
public void start (Map<String,Object>map) {
// 模拟数据库访问
UserInfo info = new UserInfo(101,"Tom","[email protected]","2015-10-12");
map.put("abc", info);
}
@RequestMapping(value="/testModelAttribute")
public String testModelAttribute(@ModelAttribute(value="abc")UserInfo info) {
System.out.println("userInfo:"+ info);
return "success";
}
1.2 修饰有返回值的方法
实例:
@ModelAttribute(value="abc")
public UserInfo start (Map<String,Object>map) {
// 模拟数据库访问
UserInfo userInfo = new UserInfo(101,"Tom","[email protected]","2015-10-12");
return userInfo;
}
@RequestMapping(value="/testModelAttribute")
public String testModelAttribute(@ModelAttribute(value="abc")UserInfo info) {
System.out.println("userInfo:"+ info);
return "success";
}
2.在方法的入参前使用@ModelAttribute注解:
可从隐含对象中获取隐含的模型数据中获取对象
再将请求参数绑定到对象中,再传入入参
将方法入参对象添加到模型中