Spring处理模型数据,如果跳转时需要带数据:view和model,则可以使用以下方式:ModelAndView、ModelMap、Map、Model,将数据放在request作用域。还有@SessionAttributes和@ModelAttribute
ModelAndView
@RequestMapping(value="testModelAndView")
public ModelAndView testModelAndView() {//ModelAndView既有数据也有视图
ModelAndView mv = new ModelAndView("success");//view:就是success加上前缀和后缀
Student student = new Student();
student.setId(2);
student.setName("zs");
mv.addObject("student", student);//相当于request.setAttribute("student", student)
return mv;
}
ModelMap
@RequestMapping(value="testModelMap")
public String testModelMap(ModelMap mm) {
Student student = new Student();
student.setId(2);
student.setName("zs");
mm.put("student2", student);//放入request域中
return "success";//返回view页面
}
Map
@RequestMapping(value="testMap")
public String testMap(Map m) {
Student student = new Student();
student.setId(2);
student.setName("zs");
m.put("student3", student);//放入request域中
return "success";
}
Model
@RequestMapping(value="testModel")
public String testModel(Model model) {
Student student = new Student();
student.setId(2);
student.setName("zs");
model.addAttribute("student4", student);//放入request域中
return "success";
}
@SessionAttributes将数据放入session域中,只需为该类加上该注解
@SessionAttributes(value="student4,student2")//如果要把student4放入request域中,则同时将该对象放入session域中。只放入一个则value可以省略,放入多个则用逗号隔开
//@SessionAttributes(types = Student.class)//如果要在request域中存放Student类型的对象,则将Student类型的对象都放入session域中
//@SessionAttributes(types = {Student.class,Address.class})将两个类型都加入session域中
@ModelAttribute
经常在更新时使用,通过@ModelAttribute修饰的方法,会在每次请求前先执行。
//查询
@ModelAttribute//在任何一次请求前,都会先执行@ModelAttribute修饰的方法
//被@ModelAttribute修饰的方法,在请求该类的各个方法前均被执行的设计是合理的,基于:一个控制器只做一个功能
public void queryStudentById(Map<String,Object> map) {
//模拟调取三层查询数据库
Student student = new Student();
student.setId(31);
student.setName("zs");
student.setAge(23);
//map.put("student", student);//约定:map的key就是方法参数类型首字母的小写
//如果没有符合约定,则需要做一些配置
map.put("stu", student);
}
//修改
@RequestMapping(value="testModelAttribute")
public String testModelAttribute(@ModelAttribute("stu")Student student) {
student.setName(student.getName());
System.out.println(student);
return "success";
}