SpringMVC之数据模型的处理

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" } }
 

猜你喜欢

转载自www.cnblogs.com/pamne/p/11288580.html