Spring MVC 中的@ModelAttribute 是什么?

新手上路,请多包涵

@ModelAttribute 在Spring MVC中的用途和用法是什么?

原文由 Mohammad Adnan 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 425
2 个回答

@ModelAttribute 指的是模型对象的一个属性(MVC 中的 M ;)所以假设我们有一个带有名为“Person”的表单支持对象的表单,那么您可以让 Spring MVC 将此对象提供给使用 @ModelAttribute 注释的控制器方法:

 public String processForm(@ModelAttribute("person") Person person){
    person.getStuff();
}

另一方面,注释用于定义应该是模型一部分的对象。所以如果你想在模型中引用一个 Person 对象,你可以使用下面的方法:

 @ModelAttribute("person")
public Person getPerson(){
    return new Person();
}

这个带注释的方法将允许访问视图中的 Person 对象,因为它会被 Spring 自动添加到模型中。

请参阅 “使用@ModelAttribute”

原文由 fasseg 发布,翻译遵循 CC BY-SA 4.0 许可协议

我知道这是一个旧线程,但我想我把我的帽子扔进戒指,看看我是否可以把水弄得更浑一点:)

我发现我最初难以理解 @ModelAttribute 是 Spring 决定将多个注释合并为一个的结果。一旦我把它分成几个更小的注释,它就变得更清楚了:

对于参数注释,将 @ModelAttribute 视为等同于 @Autowired + @Qualifier 即它尝试从 Spring 管理模型中检索具有给定名称的 bean。如果未找到指定的 bean,它不会抛出错误或返回 null ,而是隐式承担 @Bean 的角色,即使用默认构造函数创建一个新实例并添加 bean到模型。

对于方法注释,将 @ModelAttribute 视为等同于 @Bean + @Before ,即将用户代码构建的 bean 放入模型中,并且始终在请求处理方法之前调用。

形象地说,我看到 @ModelAttribute 如下(请不要照字面意思!!):

 @Bean("person")
@Before
public Person createPerson(){
  return new Person();
}

@RequestMapping(...)
public xxx handlePersonRequest( (@Autowired @Qualifier("person") | @Bean("person")) Person person, xxx){
  ...
}

如您所见,Spring 做出了正确的决定,将 @ModelAttribute 作为一个无所不包的注解;没有人想看到注释大杂烩。

原文由 Christopher Yang 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题