资讯专栏INFORMATION COLUMN

3.9、在方法上使用@ModelAttribute注解

王笑朝 / 2236人阅读

摘要:用在方法上的指示那个方法的目的是添加一个或多个模型属性。在控制器中的方法的调用时机是在同一个控制器中的方法之前。注意,有两种形式的方法。注解也可以用在方法上。

  这一部分翻译自 Spring 5.0.0.M1 文档中的 Using @ModelAttribute on a method 一节。这一节的演示示例在这个项目的 mvc 分支中的 ModelAttrController.java 文件中。

  注解@ModelAttribute可以用在方法或者方法参数上。这一节解释它用在方法上,下一节解释把它用在方法参数上。

  用在方法上的@ModelAttribute指示那个方法的目的是添加一个或多个模型属性(model attributes)。这样的方法和@RequestMapping方法支持的参数类型相同,但是不能直接映射到请求。在控制器中的@ModelAttribute方法的调用时机是在同一个控制器中的@RequestMapping方法之前。下面是几个例子:

// 添加一个属性
// 这个方法的返回值被添加到名为 “account” 的模型下
// 你可以自定义这个名字,像这样 @ModelAttribute("myAccount")
@ModelAttribute
public Account addAccount(@RequestParam String number) { return accountManager.findAccount(number); }

// 添加多个属性
@ModelAttribute
public void populateModel(@RequestParam String number, Model model) 
{
    model.addAttribute(accountManager.findAccount(number));
    // add more ...
}

  @ModelAttribute方法用于构建带有常用属性的模型,比如用状态或者宠物类型填充一个下拉框,或者取回一个命令对象如 Account,把它用作 HTML 表单数据。后一种情况在下一节会进行更深入的讨论。

  注意,有两种形式的@ModelAttribute方法。第一种,方法通过返回属性来隐式地添加属性。第二种,方法接受一个Model参数,并把任何数量的属性添加给它。你可以根据需要选择其中的任何一种。

  一个控制器可以有任何数量的@ModelAttribute方法。所有的这些方法都在同一个控制器中的@RequestMapping方法之前调用。【很遗憾,我现在还没有找到关于一个控制器中有多个@ModelAttribute方法时,这些方法的调用顺序的说明。以后找到的话会补上】

  @ModelAttribute方法也可以定义在一个带有@ControllerAdvice注解的类中,这些方法应用于很多控制器。详情参见“使用@ControllerAdvice@RestControllerAdvice通知控制[2]”一节

  在不显式指定属性名的时候发生了什么?这种情况下,被赋值的模型属性的缺省名称是基于其类型的。比如,如果一个方法返回一个 Account 类型的对象的话,那么缺省名就是“account”。你可以通过注解@ModelAttribute的值来改变。如果直接添加属性到模型的话,请使用合适的方法 addAttribute(..) 的重载。

  注解@ModelAttribute也可以用在@RequestMapping方法上。这种情况下,@RequestMapping方法的返回值被拦截为一个模型属性,而不是一个视图名。关于视图,参见源文档的18.13.3节“视图——RequestToViewNameTranslator”。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/66053.html

相关文章

  • 3.10、方法参数使用@ModelAttribute注解

    摘要:本节解释它用在参数上的情形。一个用在方法参数上的注解指示了参数应该从模型这里所说的模型指中获取。方法是一种常用的从数据库中获取属性的方式,可以通过使用注解把这种属性在各个请求之间共享。下一步是数据绑定。   这一部分实例见这个项目的 mvc 分支下的 ModelAttrArgsController.java   上节说过,@ModelAttribute可以用在方法或方法参数上。本节解...

    huhud 评论0 收藏0
  • 从原理层面掌握@ModelAttribute使用(核心原理篇)【一起学Spring MVC】

    摘要:虽然它不是必须,但是它是个很好的辅助官方解释首先看看官方的对它怎么说它将方法参数方法返回值绑定到的里面。解析注解标注的方法参数,并处理标注的方法返回值。 每篇一句 我们应该做一个:胸中有蓝图,脚底有计划的人 前言 Spring MVC提供的基于注释的编程模型,极大的简化了web应用的开发,我们都是受益者。比如我们在@RestController标注的Controller控制器组件上用@...

    wdzgege 评论0 收藏0
  • 从原理层面掌握@ModelAttribute使用使用篇)【一起学Spring MVC】

    摘要:和一起使用参照博文从原理层面掌握的使用一起学。至于具体原因,可以移步这里辅助理解从原理层面掌握的使用核心原理篇一起学再看下面的变种例子重要访问。 每篇一句 每个人都应该想清楚这个问题:你是祖师爷赏饭吃的,还是靠老天爷赏饭吃的 前言 上篇文章 描绘了@ModelAttribute的核心原理,这篇聚焦在场景使用上,演示@ModelAttribute在不同场景下的使用,以及注意事项(当然有些...

    BenCHou 评论0 收藏0
  • springmvc常用注解标签详解

    摘要:分发处理器将会扫描使用了该注解的类的方法,并检测该方法是否使用了注解。作用该注解用于将的方法返回的对象,通过适当的转换为指定格式后,写入到对象的数据区。用于注解层,在类上面注解。使用标记的参数。 1、@Controller 在SpringMVC 中,控制器Controller 负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业务处理层处理之后封装成一个M...

    notebin 评论0 收藏0
  • spring-mvc注解

    摘要:关键注解的关键注解主要有其中主要是用于标记该类是一个控制器,用于指示的哪一个类或方法来处理请求动作,即用于标识具体的处理器。默认已经装配了作为组件的实现类,而由使用,将请求信息转换为对象。 关键注解 springmvc的关键注解主要有@Controller/@RequestMapping/@RequestParam/@PathVariable/@RequestHeader/@Cooki...

    EdwardUp 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<