使用ModelAndView
- 方法的返回值类型为ModelAndView
- ModelAndView支持自动添加前后缀,可在初始化对象时传入对应的页面名称
- 通过addObject(key,value)添加传回数据
@RequestMapping(value="testModelAndView")
public ModelAndView testModelAndView() {
Student student = new Student();
student.setId(1);
student.setName("zs");
ModelAndView mv = new ModelAndView("success");
mv.addObject("student", student);
return mv;
}
使用ModelMap、Model、Map
- 返回值参数为对应路径的名称
- addAttribute(key,value)/put(key,value)设置对应的参数
@RequestMapping(value="testModelMap")
public String testModelMap(ModelMap mm) {
Student student = new Student();
student.setId(1);
student.setName("zs");
mm.addAttribute("student1", student);
return "success";
}
@RequestMapping(value="testModel")
public String testModel(Model mo) {
Student student = new Student();
student.setId(1);
student.setName("zs");
mo.addAttribute("student3", student);
return "success";
}
@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);
}
ModelAttribute前置操作
- 给前置操作添加注解@ModelAttribute
- 通过map.(key,value)传值
注意:
i.在任何一次请求前,都会先执行@ModelAttribute修饰的方法
ii.传参时可约定可设置。约定为map的key为对应方法的类型的单词首字母小写;规定约束map的key为对应方法@ModelAttribute(“xxx”)注解中的字符串一致
iii.运行时先运行前置操还,将值赋值给对应方法的变量,然后再将前台传递的参数赋值给对应的对象
例如前置操作student对象的name为zs,前端填写的字段值为ls,则在执行输出时为31-ls-23
@ModelAttribute
public void queryStudentById(Map<String , Object> map) {
Student student = new Student();
student.setId(31);
student.setName("zs");
student.setAge(23);
map.put("stu", student);
}
@RequestMapping(value="testModelAttribute")
public String testModelAttribute(@ModelAttribute("stu")Student student) {
System.out.println(student.toString());
return "success";
}
<form action="Handler/testModelAttribute" method="post">
编号:<input name="id" type="hidden" value="31"/>
姓名:<input name="name" type="text"/>
<input type="submit" value="修改"/>
</form>