SpringMvc @ModelAttribute

@ModelAttribute在controller中有以下几种情况用法:

(1)应用在方法上

标记在方法上,会在每个方法执行之前被SpringMvc调用(有点像过滤的用法)如:

SpringMvc @ModelAttribute

SpringMvc @ModelAttribute

结果:密码没被修改

SpringMvc @ModelAttribute

(2)应用在方法参数上

public String test1(@ModelAttribute("user") User user)  

 只是此处多了一个注解@ModelAttribute("user"),它的作用是将该绑定的命令对象以“user”为名称添加到模型对象中供视图页面展示使用。我们此时可以在视图页面使用${user.username}来获取绑定的命令对象的属性。

 

public @ModelAttribute("user2") UserModel test3(@ModelAttribute("user2") UserModel user)  

大家可以看到返回值类型是命令对象类型,而且通过@ModelAttribute("user2")注解,此时会暴露返回值到模型数据( 名字为user2 ) 中供视图展示使用

@ModelAttribute 注解的返回值会覆盖@RequestMapping 注解方法中的@ModelAttribute 注解的同名命令对象

 

(3)应用在方法上,并且同时使用了@RequestMapping

@Controller 
public class UserController{ 
     @RequestMapping(value = "/helloWorld.do") 
     @ModelAttribute("attributeName") 
     public String helloWorld() { 
          return "hi"; 
       } 
   }

  这时这个方法的返回值并不是表示一个视图名称,而是model属性的值,视图名称由RequestToViewNameTranslator根据请求"/helloWorld.do"转换为逻辑视图helloWorld。
Model属性名称有@ModelAttribute(value=””)指定,相当于在request中封装了key=attributeName,value=hi。