首页 > 代码库 > SpringMVC-@ModelAttribute注解2

SpringMVC-@ModelAttribute注解2

先看一个没有使用@ModelAttribute的Controller方法

@RequestMapping("/save")  
public String save(User user) {  
    user.setUsername("U love me");  
    userService.save(user);  
    return "result";  
}  

 执行此方法时会将key为"user"(注意:这里即使参数名称是user1,key一样还是"user"),

value为user的对象加入到model。在jsp页面可以通过${user.id}和${user.name}得到值的,

即上面方法和下面方法是相当的:

@RequestMapping("/save")  
public String save(Model model,int id,String username) {  
    User user=new User();  
    //这里是通过反射从request里面拿值再set到user  
    user.setId(id);  
    user.setUsername(username);  
    model.addAttribute("user",user);  
      
    user.setUsername("U love me");  
    userService.save(user);  
    return "result";  
}  

一.下面再来看看@ModelAttribute的基本用法.
1.在方法上使用@ModelAttribute

@ModelAttribute("user1")  
public User addUser(User user) {  
    return new User(520,"I love U");  
}  

若在Controller内,那么执行Controller内带有@RequestMapping的方法之前,都会先执行此addUser方法。

并且执行addUser过程中会添加两个对象到model,

先添加key为"user"的对象(由addUser方法的User user引起的),再添加key为"user1"的对象(由注解@ModelAttribute("user1")引起的).

2.在方法参数上使用@ModelAttribute.

@RequestMapping("/save")  
public String save(@ModelAttribute User user) {  
    user.setUsername("U love me");  
    userService.save(user);  
    return "result";  
}

此方法会先从model去获取key为"user"的对象,如果获取不到会通过反射实例化一个User对象,

再从request里面拿值set到这个对象,然后把这个User对象添加到model(其中key为"user")。
使用了@ModelAttribute可修改这个key,不一定是"user",此情况下,用与不用@ModelAttribute没有区别。

SpringMVC-@ModelAttribute注解2