Spring MVC 提供了以下几种途径输出模型数据:
ModelAndView: 处理方法返回值类型为 ModelAndView 时, 方法体即可通过该对象添加模型数据
Map 及 Model:
入参为org.springframework.ui.Model、org.springframework.ui.ModelMap 或 java.uti.Map
时,处理方法返回时,Map 中的数据会自动添加到模型中。
@SessionAttributes: 将模型中的某个属性暂存到HttpSession
中,以便多个请求之间可以共享这个属性
@ModelAttribute: 方法入参标注该注解后, 入参的对象就会放到数据模型中
1.ModelAndView
控制器处理方法的返回值如果为 ModelAndView, 则其既包含视图信息,也包含模型数据信息。
添加模型数据:
MoelAndView
addObject(String attributeName, Object attributeValue)
ModelAndView
addAllObject(Map<String, ?> modelMap)
设置视图 :
void setView(View view
)
void setViewName(String viewName)
例子:
jsp代码:
1 <a href="springmvc/testModelAndView">testModelAndView</a><br>
java
1 @RequestMapping(value="/testModelAndView") 2 public ModelAndView testModelAndView(){ 3 String viewName=SUCCESS; 4 ModelAndView model=new ModelAndView(viewName); 5 model.addObject("time", new Date()); 6 return model; 7 }
其中,viewname是返回的视图名称,就是这些数据在哪个页面显示的那个页面地址。
model对象可以看成一个存放数据的容器,可以往里面加入键值对的对象,在显示的页面再把其取出来显示
1 time: 2 ${requestScope.time }
可以把MAV理解成M给V数据,springmvc把模型数据放入到了请求域中。
2 .Map 及 Model
Spring MVC 在内部使用了一个org.springframework.ui.Model 接口存储模型数据
具体步骤:
Spring MVC 在调用方法前会创建一个隐含的模型对象作为模型数据的存储容器。如果方法的入参为 Map 或 Model 类型,Spring MVC 会将隐含模型的引用传递给这些入参。在方法体内,开发者可以通过这个入参对象访问到模型中的所有数据,也可以向模型中添加新的属性数据
jsp
1 <a href="springmvc/testMap">testMap</a><br>
java
1 /* 2 * 目标方法可以添加map类型的参数 3 * 实际也可以是Model或者ModelMap类型的参数 4 * org.springframework.validation.support.BindingAwareModelMap 5 */ 6 @RequestMapping(value="/testMap") 7 public String testMap( Map<String,Object> map){ 8 System.out.println(map.getClass().getName()); 9 map.put("names", Arrays.asList("王五","张三","李四")); 10 11 return SUCCESS; 12 }
success.jsp
[email protected]
若希望在多个请求之间共用某个模型属性数据,则可以在控制器类上标注一个 @SessionAttributes, Spring MVC 将在模型中对应的属性暂存到 HttpSession 中。
@SessionAttributes 除了可以通过属性名指定需要放到会话中的属性外,还可以通过模型属性的对象类型指定哪些模型属性需要放到会话中
@SessionAttributes(types=User.class) 会将隐含模型中所有类型为 User.class 的属性添加到会话中。
@SessionAttributes(value={“user1”, “user2”})
@SessionAttributes(types={User.class, Dept.class})
@SessionAttributes(value={“user1”, “user2”}, types={Dept.class})
例子
jsp
1 <a href="springmvc/testSession">testSession</a><br>
java
1 @RequestMapping(value="/testSession") 2 public String testSessionAttribute(Map<String,Object> map){ 3 User user=new User("baipeng", "123", "[email protected]", 23); 4 map.put("user", user); 5 map.put("school", "cumt"); 6 return SUCCESS; 7 }
结果
请求与与session域中都可以获得到。