返回介绍

4.7 @ModelAttribute

发布于 2025-04-22 20:09:59 字数 1371 浏览 0 评论 0 收藏

前面谈到 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));
}

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。