一.ModelAndView
控制器的处理方法返回值为ModelAndView,则其即包含视图信息,也包含模型数据信息
1.添加模型数据方法
ModelAndView addObject(String attributeName,Object AttributeValue)
ModelAndView addAllObject(Map(String,?) modelMap)
2.设置视图
void setView(View view)
void setViewName(String viewName)
@RequestMapping("testModelAndView")
public ModelAndView testModelAndView() {
String viewName = "success";
ModelAndView modelAndView = new ModelAndView();
// 添加数据模型到modelAndView中
modelAndView.addObject("time", new Date());
// 设置返回的视图名称
modelAndView.setViewName(viewName);;
return modelAndView;
}
success.jsp:
<body>
success page !!
time: ${requestScope.time}
</body>
二.控制器方法参数是Map或Model
SpringMVC在调用方法前会创建一个隐含的模型对象作为模型数据的存储容器,如果方法的参数是Map或Model类型,SpringMVC会将隐含的模型引用传递给这些参数,在方法体类,可以通过这个参数对象访问到模型中的所有数据,也可以向模型中添加新的属性数据
@RequestMapping("testMap")
public String testMap(Map<String, Object>map){
map.put("names", Arrays.asList("aa","bb","cc"));
return "success";
}
@RequestMapping("testModel")
public String testModel(Model model){
model.addAttribute("name","zhangsan");
return "success";
}
三.@SessionAttribute注解
若希望在多个请求之间共享某个模型属性数据,则可以在控制器类上标注@SessionAttribute,SpringMVC将在模型中对应的属性暂存到HttpSession中
/**
* @SessionAttributest通过value指定放入会话中属性,可以通过types指定放入模型对象类型
*/
@Controller
@SessionAttributes(value={"student"},types={Student.class})
public class SpringmvcTest {
@RequestMapping("testSessionAttribute")
public String testSessionAttribute(Map<String,Object> map){
Student student = new Student("zhangsan",20,"sd@huawei.com");
map.put("student", student);
return "success";
}
}
success.jsp:
<body>
success page !!
<br>
<br>
student1: ${requestScope.student}
<br>
<br>
student2:${sessionScope.student}
</body>