处理模型数据之ModelAndView
—SpringMVC提供了以下几种途径输出模型数据:
- ModelAndView:处理方法返回值类型为ModelAndView时,方法即可通过该对象添加模型数据。
- Map及Model:入参为org.springframework.ui.Model、org.springframework.ui.ModelMap、java.util.Map时,处理方法返回值时,Map中的数据会自动添加到模型中。
- @SessionAttributes:将模型中的某个数据暂存到HttpSession中,以便多个请求间可以共享这个属性。
- @ModelAttribute:方法入参标注该注解后,入参的对象就会放到数据模型中。
ModelAndView
- 控制器处理方法的返回值如果为ModelAndView,则其包含视图信息,也包含模型数据信息。
- 添加模型数据:
—ModelAndView addObject(String attributeName,Object attributeValue)
—ModelAndView addAllObject(Map<String,?> modelMap)
- 设置视图:
—void setView(View view)
—void setViewName(String viewName)
/** * 目标方法的返回值可以是ModelAndView类型 * 其中可以包含视图和模型信息 * SpringMVC会把ModelAndView的model中数据放入到request域对象中 * @return */ @RequestMapping("/testModelAndView") public ModelAndView testModelAndView(){ String viewName = SUCCESS; ModelAndView mv = new ModelAndView(viewName); //添加模型数据到ModelAndView中 mv.addObject("time",new Date()); return mv; }
处理模型数据之Map及Model
- SpringMVC在内部使用了一个 org.springframework.ui.Model 接口存储模型数据
- 使用步骤:
—SpringMVC在调用方法前会创建一个隐含的模型对象作为模型数据的存储容器
—如果方法的入参为Map或Model类型,SpringMVC会将隐含模型的引用传给这些入参,在方法体内开发者可以通过这个入参对象访问到模型中的所有数据,也可以向模型中添加新的模型数据。
/** * 目标对象可以添加Map类型的参数,也可以是Model类型或MedelMap类型 * @param map * @return */ @RequestMapping("/testMap") public String testMap(Map<String,Object> map){ System.out.println(map.getClass().getName()); map.put("names", Arrays.asList("Tom","Jerry","Mike")); return SUCCESS; }
处理模型数据之@SessionAttributes注解
- 若希望在多个请求之间共用某个模型属性数据,则可以在控制器类上标注一个@SessionAttributes注解,SpringMVC将在模型中对应的属性暂存到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})
/** * @SessionAttributes 除了可以通过属性名,指定需要放到会话中的属性外(实际上使用的是value属性值) * 还可以通过模型属性的对象类型指定哪些模板属性需要放到会话中(实际上是使用的是types属性值) * * 注意:该注解只能放在类的上面,而不是修饰方法上 * * @param map * @return */ @RequestMapping("/testSessionAttributes") public String testSessionAttributes(Map<String,Object> map){ System.out.println(map.getClass().getName()); User user = new User("Tom","Jerry",14,"Mike"); map.put("user", user); return SUCCESS; }