如果跳转时需要带数据:V、M,则可以使用以下方式:
ModelAndView、ModelMap、Map、Model----数据存放在request作用域中
@RequestMapping(value="ModelAndView")
public ModelAndView ModelAndView() {//ModelAndView:既有数据,又有视图
//ModelAndView:Model---M View---V
ModelAndView mv=new ModelAndView("A_success");//view: views/success.jsp
Student student=new Student();
student.setId(12);
student.setName("joker");
mv.addObject("student", student);//相当于:request.setAttribute();
return mv;
}
@RequestMapping(value="testModelMap")
public String testModelMap(ModelMap mm) {
Student student=new Student();
student.setId(13);
student.setName("Rose3");
mm.put("student2", student);//request域,springmvc自动放入
return "A_success";
}
@RequestMapping(value="testMap")
public String testMap(Map<String , Object> map) {
Student student=new Student();
student.setId(14);
student.setName("TomCat4");
map.put("student3", student);//request域,springmvc自动放入
return "A_success";
}
@RequestMapping(value="testModel")
public String testModel(Model model) {
Student student=new Student();
student.setId(15);
student.setName("Luck5");
model.addAttribute("student4", student);//request域,springmvc自动放入
return "A_success";
}
注解方式:@SessionAttributes、@ModelAttribute
如何将数据放入session作用域中?@SessionAttributes(…)
//如果要在request中放入student4对象,则同时放入session中
@SessionAttributes("student4")
public class XXXX{}
//如果要在request中存放student类型对象,则同时放入session中
@SessionAttributes(types=Student.class)
@ModelAttribute:经常在 更新时使用
通过@ModelAttribute修饰的方法,会在每次请求前先执行;并且该方法的参数map.put()可以将 对象 放入 即将查询的参数中;
必须满足的约定:
map.put(k,v) 其中的k 必须是即将查询的方法参数 的首字母小写
testModelAttribute(Student xxx), 即student;
如果不一致需要通过@ModelAttribute声明。如下:
testModelAttribute(@ModelAttribute(“stu”)Student xxx)
@ModelAttribute//任何一次请求之前先执行@ModelAttribute修饰的方法
public void query(Map<String , Object> map) {
//StudentService stuService=new StudentService();
//Student student=stuService.queryStudentById(31);
//模拟调用三层查询数据库的操作
Student student =new Student();
student.setId(31);
student.setName("sw");
student.setAge(18);
// 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.getId()+"-"+student.getName()+"-"+student.getAge());
return "A_success";
}
@ModelAttribute的应用之处:
1.在 更新数据时使用
2.在不改变原有代码的基础之上,插入一个新的方法。
注意:@ModelAttribute修饰的方法会在该类的每个方法(请求)执行之前执行(本来是基于理念:一个控制器对应一个功能),使用时慎用。