Spring MVC提供了如下几种途径输出模型数据:
java
-- ModelAndView:处理方法返回值类型为ModelAndView时,方法体便可经过该对象添加模型数据。
spring
--Map及Model:入参为org.springframework.ui.Model、org.springframework.ui.ModelMap或java.uti.Map时,处理方法返回时,Map中的数据会自动添加到模型中。session
--@SessionAttributes:将模型中的某个属性暂存到HttpSession中,以便多个请求之间能够共享这个属性到Httpsession中,以便多个请求之间共享这个属性。
app
--@ModelAttribute :方法入参标注该注解后,入参的对象就会放到数据模型中。
jsp
@RequestMapping("/testModelAndView") public ModelAndView testModelAndView(){ String viewName = "success"; ModelAndView modelAndView = new ModelAndView(viewName); //添加模型数据到ModelAndView modelAndView.add("time",new Date()); return modelAndView; }
页面获取参数jsp页面ui
$(requestScope.time)
从这里能够看出来,SpringMVC会把ModelAndView的model中数据放入到request域对象中。
code
2、Map 及 Model使用
对象
SpringMVC在调用方法前会建立一个隐含的模型对象做为模型数据的存储容器。
开发
若是方法的入参为Map或Model类型。SpringMVC会将隐含类型的引用传递给这些入参,在方法体内,开发者能够经过这个入参对象访问到模型中的全部数据,也能够像模型中添加新的属性数据。
io
@RequestMapping("/testMap") public String testMap(Map<String,Object> map){ map.put("names",Arrays.asList("tome","jack',"mike")); return "success"; }
调用模型数据的方法同ModeAndView 同样,数据都放到了request域对象中。
3、@SessionAttributes
在控制器类上标注一个@SessionAttributes,SpringMVC将在模型中对应的属性暂存到HttpSession中。
@SessionAttributes除了能够经过属性名指定须要放到会话中的属性外,还能够经过模型属性的对象类型指定哪些模型属性须要放到会话中
--@SessionAttributes(types=User.class)会将隐含模型中全部类型为User.class的属性添加到会话中。
--@SessionAttributes(value={"user1","user2"})
--@SessionAttributes(type={User.class,Dept.class})
--@SessionAttributes(value={"user1","user2"},types{String.class})
@SessionAttributes(value={"user2"},types="String.class") @Controller public class SpringMVCTest{ @RequestMappping("/test/sessionAttribute") public String testSessionAttribute(Map<String ,Object> map){ User user = new User("tom","123","tom@163.com",12); map.put("user",user); map.put("name","tom"); return "success"; } }
这里将会把Map集合中的数据保存到Request和Session域对象中,获取Session模型数据
$(requestScope.user) $(sessionScope.user) $(requestScope.name) $(sessionScope.name)