@ModelAttribute注解只支持一个属性value,类型是为String,代表绑定的属性名称。

 

@ModelAttribute会优先于@RequestMapping执行,也会在Controller中每个方法执行前被执行,所以当一个Controller中有映射到多个Url时,需要谨慎使用

 

@ModelAttribute的注解方法大致有五种,下面总结一下

 

1.

@Controller
public class ModelAttributeController{
           @ModelAttribute("loginname")
           public String userModelfirst(@ResquestParam("loginname") String loginname){
//返回的参数赋值给value变量
             return loginname;   
     }
           @RequestMapping(vaule="/loginfirst")
            public String loginfirst(){
//返回到结果界面
      return "resultfirst"; 
}        
}

这里注解@ModelAttribute注解默认vaule值为“loginname”,指定model的属性名称,属性的值就是@ModelAttribute注解的方法的返回值。

他把请求参数loginname的值通过@ResquestParam赋值给变量loginname,然后再设置一个名为loginname的属性到Model中,属性值就是变量loginname的值

因为@ModelAttribute优先于@RequestMapping执行,所以当访问URL“/loginfirst”时会先执行@ModelAttribute注解的方法

在resultfirst.jsp中用EL表达式得到${resquestScope.loginname}获取

 

 

 

2.

@Controller
public class ModelAttributeController{
           @ModelAttribute
           public void userModelsecond(@ResquestParam("loginname") String loginname,Model model){
             model.addAttribute("loginname",loginname);
     }
           @RequestMapping(vaule="/loginsecond")
            public String loginsecond(){
          //返回到结果界面
          return "resultsecond"; 
}        
}

这里@ModelAttribute注解的方法void返回值,将请求参数通过@ResquestParam赋值给变量,再通过model.addAttribute()方法实现model属性名称和属性值。

在resultsecond.jsp中用EL表达式得到${resquestScope.loginname}获取传递的值

 

 

 

3

@Controller
public class ModelAttributeController{
           @RequestMapping(vaule="/loginthird")
           @ModelAttribute(vaule="uesrname")
           public String loginthird{
                  return "admin";
     }     
}        
}    

 

@RequestMapping和@ModelAttribute注释同一个方法时,此方法返回的不是一个视图名称,而是model的值,视图名称是"/loginthird",Model的属性名称value已经在注解中指定,所以,
可以理解为username(key)= admin(value)




4
@Controller
public class ModelAttributeController{
           @ModelAttribute("user")
           public String userModelfourth(@ResquestParam("loginname") String loginname){
                    User user = new User();
                    user.setLoginame(loginname);
             return user;   
     }
           @RequestMapping(vaule="/loginfourth")
            public String loginfourth( @ModelAttribute("user") User user){
//返回到结果界面
            user.setUsername("test");
            return "resultfourth"; 
}        
}

在这里user就是model的value值,返回的user赋值给了value,在下面方法用了@ModelAttribute("user") User user注释参数,意思就是参数user的值就是userModelfourth()的model属性;




5
@Controller
public class ModelAttributeController{
           @ModelAttributepublic User UseruserModelfifth(@ResquestParam("loginname") String loginname,
    @ResquestParam("password") String password){ User user
= new User(); user.setLoginame(loginname);
            user,setLoginame(password);
        
        //方法返回的是user或null
return find(loginname,password); } @RequestMapping(vaule="/loginfifth") public String loginfifth(){return "resultfifth"; } }

在这里model的属性名称没有被指定,也没有传入Model类型的参数,由于@ModelAttribute先于loginfifth()方法调用,所以@ModelAttribute注解的方法返回类型隐含表示,

就是说如果find(loginname,password)返回的类型是User,那么model的属性名称就是user。


未经允许,不得转发,后果自负

 

posted on 2017-05-18 00:32  red丶tomato  阅读(3043)  评论(1编辑  收藏  举报