今天研究了比较久,网上的资料说的不是很清楚,来这里整理一下。
不一定准确,但是八九不离十吧。
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回从请求中绑定数据。其实写不写标注都可以完成绑定。
新闻热点
疑难解答