@ModelAttribute注解


@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。


未經允許,不得轉發,后果自負

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM