SpringMVC提供了四种途径来处理带数据的视图,它们分别是:ModelAndView,Map、ModelMap及Model,@SessionAtributes,@ModelAtribute
1.ModelAndView
<a href="data/data">demo</a> @Controller @RequestMapping(value="/data") public class test1{ @RequestMapping(value="/data") // @RequestMapping("/data") public ModelAndView testModel{ String view="success"; ModelAndView mav=new ModelAndView(view); User user=new User("admin","123"); mav.addObject(user); return mav; } } <body> ${requestScope.user.username} ${requestScope.user.password} </body>
2.使用Map、ModelMap、Model作为方法的参数处理数据
给SpringMVC一个Map类型的参数,如果向Map中增加数据,那么该数据也会被放到request作用域中
<a href="data/data">demo</a> @Controller @RequestMapping(value="/data") public class test1{ @RequestMapping(value="/data") public String testMap(Map<String,object> map){ User user=new User("admin","123"); map.put("user",user); return "success"; } } <body> ${requestScope.user.username} ${requestScope.user.password} </body>
@Controller @RequestMapping(value="/data") public class test1{ @RequestMapping(value="/data") // @RequestMapping("/data") public String testModelMap(ModelMap map){ User user=new User("admin","123"); map.put("use",user); return "success"; } }
@Controller @RequestMapping(value="/data") public class test1{ @RequestMapping(value="/data") // @RequestMapping("/data") public String testModelMap(Model map){ User user=new User("admin","123"); map.addAttribute("use",user); return "success"; } }
3.使用@SessionAttributes
@SessionAttribute(value="user") @Controller @RequestMapping(value="/data") public class test1{ @RequestMapping(value="/data") // @RequestMapping("/data") public String testSessionAttribute(Map<String,Object> map){ User user=new User("admin","123"); map.put("use",user); return "success"; } } <body> request 作用域中 :${requestScope.user.username} session作用域中 :${sessionScope.user.username} <body>
4.使用@ModelAttribute注解处理数据
1.@ModelAttribute的应用逻辑:
(1). @ModelAttribute 修饰的方法会在请求之前执行
(2).请求中提交的use对象中的属性和map中key-value 遵循以下规则
map中有的键值对(有)----------- user对象中属性(有) 覆盖
map对象中属性(有)------------user对象中属性(无) 不变
map对象中属性(无)------------user对象中属性(有 ) null
(3)如果map中的key与对象不一致,则需要在传入的对象前加@ModelAttribute("user1") User user
2.标有@ModelAttribute的方法会在请求处理类的每个方法 执行前都执行一次,因此需要谨慎使用
jsp页面 <form action="data/data" method='post"> <input type="hidden" value="admin" name="username"> 密码<input type="text" value="124" name="password"> <input type="submit" value="修改" > </form> 请求处理类
@Controller @RequestMapping(value="/data") public class test1{
@ModelAttribute
public void queryUserBeforeUpdate(String username,Map<String,Object> map){
//使用带数据的实体类对象,模拟从数据库中获取用户名为admin的对象
//模拟查询用户名为admin的对象属性
User user=new User();
user.setUsername(username);
user.setPassword("123");
map.put("user",user); //user1
}
@RequestMapping(value="/data") public String testModelAttribute(User user){ //省略数据库的更新操作
return "success" } }