- 内容提要
- 作者简介
- 译者简介
- 前言
- HTTP
- Servlet 和 JSP
- 下载 Spring 或使用 STS 与 Maven/Gradle
- 手动下载 Spring
- 使用 STS 和 Maven/Gradle
- 下载 Spring 源码
- 本书内容简介
- 下载示例应用
- 第 1 章Spring 框架
- 第 2 章模型 2 和 MVC 模式
- 第 3 章Spring MVC 介绍
- 第 4 章基于注解的控制器
- 第 5 章数据绑定和表单标签库
- 第 6 章转换器和格式化
- 第 7 章验证器
- 第 8 章表达式语言
- 第 9 章JSTL
- 第 10 章国际化
- 第 11 章上传文件
- 第 12 章下载文件
- 第 13 章应用测试
- 附录 A Tomcat
- 附录 B Spring Tool Suite 和 Maven
- 附录 C Servlet
- 附录 D JavaServer Pages
- 附录 E 部署描述符
4.7 @ModelAttribute
前面谈到 Spring MVC 在每次调用请求处理方法时,都会创建 Model 类型的一个实例。若打算使用该实例,则可以在方法中添加一个 Model 类型的参数。事实上,还可以使用在方法中添加 ModelAttribute 注解类型来访问 Model 实例。该注解类型也是 org.springframework. web.bind.annotation 包的成员。
可以用 @ModelAttribute 来注解方法参数或方法。带 @ModelAttribute 注解的方法会将其输入的或创建的参数对象添加到 Model 对象中(若方法中没有显式添加)。例如,Spring MVC 将在每次调用 submitOrder 方法时创建一个 Order 实例。
@RequestMapping(method = RequestMethod.POST)
public String submitOrder(@ModelAttribute("newOrder") Order order,
Model model) {
...
}
输入或创建的 Order 实例将用 newOrder 键值添加到 Model 对象中。如果未定义键值名,则将使用该对象类型的名称。例如,每次调用如下方法,会使用键值 order 将 Order 实例添加到 Model 对象中。
public String submitOrder(@ModelAttribute Order order, Model model)
@ModelAttribute 的第二个用途是标注一个非请求的处理方法。被 @ModelAttribute 注解的方法会在每次调用该控制器类的请求处理方法时被调用。这意味着,如果一个控制器类有两个请求处理方法,以及一个有 @ModelAttribute 注解的方法,该方法的调用次数就会比每个处理请求方法更频繁。
Spring MVC 会在调用请求处理方法之前调用带 @ModelAttribute 注解的方法。带 @ModelAttribute 注解的方法可以返回一个对象或一个 void 类型。如果返回一个对象,则返回对象会自动添加到 Model 中。
@ModelAttribute
public Product addProduct(@RequestParam String productId) {
return productService.get(productId);
}
若方法返回 void,则还必须添加一个 Model 类型的参数,并自行将实例添加到 Model 中,如下面的例子所示。
@ModelAttribute
public void populateModel(@RequestParam String id, Model model) er);
model.addAttribute(new Account(id));
}
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论