今天研究了比較久,網上的資料說的不是很清楚,來這里整理一下。
不一定準確,但是八九不離十吧。
ModelAttribute是一個在控制器里使用的注解,用來從Model里存取數據。它可以注解在方法或者方法參數上。注解在方法上意味著往Model里存數據,注解在參數上意味著從Model取數據。
有幾種用法,參考自 http://blog.csdn.net/li_xiao_ming/article/details/8349115
一.在方法上注解
這種情況下,方法會在每個控制器方法調用之前被調用。
1.@ModelAttribute注釋void返回值的方法
public class HelloWorldController { @ModelAttribute public void populateModel(@RequestParam String abc, Model model) { model.addAttribute("attributeName", abc); } @RequestMapping(value = "/helloWorld") public String helloWorld() { return "helloWorld"; } } 這種情況下,populateModel先被執行,在model中置入請求參數(/helloWorld?abc=text),之后執行helloworld,返回視圖和準備好的model。2.@ModelAttribute注釋返回具體類的方法
@ModelAttribute public Account addAccount(@RequestParam String number) { return accountManager.findAccount(number);} 這種情況下,返回的對象會被置入Model,再傳入控制器。該對象在Model中的名稱由返回值類型決定,該例中名字是account。如果有多個同類型的對象會怎么樣?我不知道。3.@ModelAttribute(value="")注釋返回具體類的方法
@Controller public class HelloWorldController { @ModelAttribute("attributeName") public String addAccount(@RequestParam String abc) { return abc; } @RequestMapping(value = "/helloWorld") public String helloWorld() { return "helloWorld"; } }這種情況和上一種類似,只是對象在Model中的名稱由ModelAttribute的value參數決定二.@ModelAttribute注釋方法參數
這種情況下,參數回從Model中取出數據
1.從Model中獲取
@Controller public class HelloWorldController { @ModelAttribute("user") public User addAccount() { return new User("jz","123"); } @RequestMapping(value = "/helloWorld") public String helloWorld(@ModelAttribute("user") User user) { user.setUserName("jizhou"); return "helloWorld"; } }user參數將從Model中取出名字是“user”的對象2.從請求中獲取
@Controller public class HelloWorldController { @RequestMapping(value = "/helloWorld") public String helloWorld(@ModelAttribute User user) { return "helloWorld"; } }user回從請求中綁定數據。其實寫不寫標注都可以完成綁定。
新聞熱點
疑難解答