深入解读Spring Framework Web MVC(第七弹:@ModelAttribute的使用)
来源:互联网 发布:众途汽修软件 编辑:程序博客网 时间:2024/05/22 09:44
在方法上使用@ModelAttribute
@ModelAttribute可用在方法或方法参数中。
在方法上使用@ModelAttribute注解,表示此方法的目的在于添加一个或多个模型属性。这种方法所支持的参数类型与@RequestMapping一样,不同的是,它不能直接映射到request。另外,在同一个控制器里,@ModelAttribute会在@RequestMapping之前调用。如:
// 添加一个属性// 方法的返回值会以 "account"键添加到model// 可通过@ModelAttribute("myAccount")自定义@ModelAttributepublic Account addAccount(@RequestParam String number) { return accountManager.findAccount(number);}// 添加多个属性@ModelAttributepublic void populateModel(@RequestParam String number, Model model) { model.addAttribute(accountManager.findAccount(number)); // 再添加多个……}
@ModelAttribute 用来将常用属性填充到模型里。
上面展示了@ModelAttribute方法的两种使用方式。第一种,在方法里隐式添加一个属性并返回;第二种,方法里接收Model参数,并将任意个属性添加到Model中。
一个控制器可以有多个@ModelAttribute方法。在同一个控制器中,所有@ModelAttribute方法都会在@RequestMapping方法之前调用。因此对于一个controller映射多个URL的用法来说,要谨慎使用。
有一个比较常见的用法,是把这个@ModelAttribute特性,应用在BaseController当中,所有的Controller继承BaseController,即可实现在调用Controller时,先执行@ModelAttribute方法。比如验证,比如权限。
当模型属性名称没有显式定义时,默认使用参数类型名称作为模型属性名称。如上例中,当方法返回 Account 对象时,其默认的模型属性名称是”account”。我们也可以通过设置@ModelAttribute注解的 “value” 属性来自定义。
@ModelAttribute 注解也可用在 @RequestMapping 方法中。这种情况下,@RequestMapping 方法的返回值将解析为模型属性,而不是视图名称。
在方法参数上使用@ModelAttribute
@ModelAttribute注解的方法参数,表示该参数会从Model中查找。如果该参数不在Model中,此参数会先执行初始化然后添加到Model里;如果参数存在Model里,此参数字段会填充所有匹配其名称的请求参数。这就是大家熟知的Spring MVC数据绑定。
@PostMapping("/owners/{ownerId}/pets/{petId}/edit")public String processSubmit(@ModelAttribute Pet pet) { }
上述所给例子,Pet实例可以在哪里获取?有以下几种选择:
- 如果使用了@SessionAttributes,那Pet实例就已经存到Model里了,可直接从Model中获取。
- 如果同一个控制器里有@ModelAttribute方法,可能已经把Pet实例存到模型里了,可直接从Model中获取。
- 可以从URI模版变量和类型转换器获取
- 可以使用默认构造器初始化
- 深入解读Spring Framework Web MVC(第七弹:@ModelAttribute的使用)
- 深入解读Spring Framework Web MVC(第八弹:@SessionAttributes的使用)
- 深入解读Spring Framework Web MVC(第三弹:使用@Controller定义控制器)
- 深入解读Spring Framework Web MVC(第四弹:使用@RequestMapping映射请求)
- 深入解读Spring Framework Web MVC(第一弹:Spring Web MVC概述)
- 深入解读Spring Framework Web MVC(第二弹:DispatcherServlet详解)
- 深入解读Spring Framework Web MVC(第五弹:@RequestMapping中的头字段值)
- 深入解读Spring Framework Web MVC(第六弹:定义@RequestMapping处理方法)
- 深入解读Spring Framework IoC容器(第七弹:不同作用域Bean的依赖)
- [Spring MVC] - @ModelAttribute使用
- [Spring MVC] - @ModelAttribute使用
- Spring MVC - @ModelAttribute使用
- Spring MVC @ModelAttribute 使用
- spring mvc @ModelAttribute使用
- 深入解读Spring Framework事务管理(第二弹:编程式事务管理的使用方式)
- 深入解读Spring Framework事务管理(第一弹:Spring Framework的事务抽象)
- spring mvc @ModelAttribute注解使用
- Spring MVC 之@ModelAttribute使用
- 架构设计:负载均衡层设计方案(5)——LVS单节点安装
- 5-10 顺序存储的二叉树的最近的公共祖先问题 (25分)
- 301重定向
- poj3090 Visible Lattice Points(法雷级数)
- 中文字体库转换成16X16点阵 另外附上ASCII码转换8X16点阵
- 深入解读Spring Framework Web MVC(第七弹:@ModelAttribute的使用)
- QT5 获取mac地址和cpu序列号
- Redis-cli命令最新总结
- java学习笔记-01
- C++将txt文件内容保存到数组
- latex2e 札记 -- No room for a new ‘thing’
- LeeCode 106. Construct Binary Tree from Inorder and Postorder Traversal
- java android 基础
- angularjs指令:replace与transclude的区别