处理模型数据
如果跳转时需要带数据:V、M,则可以使用以下方式:
ModelAndView、ModelMap 、Map、Model -数据放在了request作用域
//@SessionAttributes(value="student4") //如果要在request中存放student4对象,则同时将该对象 放入session域中
//@SessionAttributes(types= {Student.class,Address.class}) //如果要在request中存放Student类型的对象,则同时将该类型对象 放入session域中
@Controller
@RequestMapping(value="handler") //映射
public class SpringMVCHandler {
@RequestMapping(value="testModelAndView")
public ModelAndView testModelAndView() {//ModelAndView:既有数据,又有视图
//ModelAndView:Model -M View-V
ModelAndView mv = new ModelAndView("success");//view: views/success.jsp
Student student = new Student() ;
student.setId(2);
student.setName("zs");
mv.addObject("student", student);//相当于request.setAttribute("student", student);
return mv;
}
@RequestMapping(value="testModelMap")
public String testModelMap(ModelMap mm) {//success
Student student = new Student() ;
student.setId(2);
student.setName("zs");
mm.put("student2", student);//request域
return "success"; //view
}
@RequestMapping(value="testMap")
public String testMap(Map<String,Object> m) {
Student student = new Student() ;
student.setId(2);
student.setName("zs");
m.put("student3", student);//request域
return "success";
}
@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";
}
}
success.jsp
<body>
welcome to spring mvc success<br/>
==== request:<br/>
${requestScope.student.id } -${requestScope.student.name } <br/>
${requestScope.student2.id } -${requestScope.student2.name } <br/>
${requestScope.student3.id } -${requestScope.student3.name } <br/>
${requestScope.student4.id } -${requestScope.student4.name } <br/>
==== session:<br/>
${sessionScope.student.id } -${sessionScope.student.name } <br/>
${sessionScope.student2.id } -${sessionScope.student2.name } <br/>
${sessionScope.student3.id } -${sessionScope.student3.name } <br/>
${sessionScope.student4.id } -${sessionScope.student4.name } <br/>
</body>
@ModelAttribute
i.经常在修改信息时使用
ii.在不改变原有代码的基础之上,插入一个新方法。
iii.在任何一次请求前,都会先执行@ModelAttribute修饰的方法,因此最好让一个控制器只做一个功能
hander.java
@ModelAttribute//在任何一次请求前,都会先执行@ModelAttribute修饰的方法
public void queryStudentById(Map<String,Object> map) {
//StuentService stuService = new StudentServiceImpl();
//Student student = stuService.queryStudentById(31);
//模拟调用三层查询数据库的操作
Student student = new Student();
student.setId(31);
student.setName("zs");
student.setAge(23);
// map.put("student", student);//约定:没有注解,map的key就是方法参数类型的首字母小写后的单词
map.put("stu", student) ;//约定:有了注解,map的key就是方法参数类型的注解
}
//修改:Zs-ls
@RequestMapping(value="testModelAttribute")
public String testModelAttribute(@ModelAttribute("stu")Student student) {//额外注解
student.setName(student.getName());//将名字修改为ls
System.out.println(student.getId()+","+student.getName()+","+student.getAge());
return "success";
}