看這個注解的前提最好熟悉一下SpringMVC的model組件,該注解可以有五種使用方式:
①②③為 @ModelAttribute 跟@RequestMapping 分開修飾方法,被@ModelAttribute修飾的方法比 @RequestMapping修飾的方法先一步調用!!
④是 @ModelAttribute 跟 @RequestMapping 同時修飾方法,
⑤ 是@ModelAttribute 修飾方法的參數。
①:方法返回值為void,@ModelAttribute注解沒有指定任何屬性,這樣的話需要將Model或者map傳入方法中,如下:
key為user1,value為User對象,可以用 ${requestScope.user1.userName} 取出
@ModelAttribute //@ModelAttribute 沒有指定值,且被修飾的方法返回值為void,則需要借助map或者model將數據模型放入request域 public void getUser(Map<String, Object> map) { System.out.println("ModelAttribute1.."); map.put("user1", new User("kelin","123aaa")); }
②:方法返回值為普通的pojo,@ModelAttribute注解沒有指定任何屬性,這樣的話,request域中存入的對象名字默認為類型首字母小寫,如下:
key為user(類型首字母小寫),value為User對象,可以用 ${requestScope.user.userName} 取出
@ModelAttribute //@ModelAttribute 沒有指定值,且被修飾方法有pojo類型的返回值,則request域中 key為返回值類型第一個字母小寫的字符串,value為返回值 public User getUser() { System.out.println("ModelAttribute2.."); return new User("kelin","123aaa"); }
③:方法返回值為普通的pojo,@ModelAttribute注解指定了value屬性,這樣的話,request域中就放入了一個對象,如下:
key為user2,value為User對象,可以用 ${requestScope.user2.userName} 取出
@ModelAttribute("user2")
//@ModelAttribute 的值就是request域中的key,被該注解修飾的方法的返回值為對應的value
public User getUser() {
System.out.println("ModelAttribute3..");
return new User("kelin","123aaa");
}
④:兩個注解同時修飾方法,看注釋解釋,有點不一樣,返回的東西不是視圖,而是request域中的值,返回的視圖變成了 @RequestMapping中指定的value
/* * @ModelAttribute 和 @RequestMapping 同時修飾一個方法 * * @ModelAttribute 中value為 request域中的key,被修飾的方法返回值為request域中的value * @RequestMapping 中value為 返回的視圖名,此例中相當於定向到xxx/testModelAttribute4.jsp */ @ModelAttribute(value="user") @RequestMapping(value="/testModelAttribute4..") public User testModelAttribute() { return new User("kelin","123aaa"); }
⑤:@ModelAttribute 修飾方法參數(最常用),參數直接封裝到對象中,比如常用的 pageNo,pageSize...
/* * @ModelAttribute用於修飾入參,前台傳過來的值自動賦予入參對於的屬性 */ @RequestMapping("/testModelAttribute5") public String testModelAttribute(@ModelAttribute User user) { return "modelAttribute"; }
