@ModelAttribute
在Spring MVC中的用途和用法是什么?
原文由 Mohammad Adnan 发布,翻译遵循 CC BY-SA 4.0 许可协议
@ModelAttribute
在Spring MVC中的用途和用法是什么?
原文由 Mohammad Adnan 发布,翻译遵循 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 许可协议
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
3 回答1.7k 阅读✓ 已解决
@ModelAttribute
指的是模型对象的一个属性(MVC 中的 M ;)所以假设我们有一个带有名为“Person”的表单支持对象的表单,那么您可以让 Spring MVC 将此对象提供给使用@ModelAttribute
注释的控制器方法:另一方面,注释用于定义应该是模型一部分的对象。所以如果你想在模型中引用一个 Person 对象,你可以使用下面的方法:
这个带注释的方法将允许访问视图中的 Person 对象,因为它会被 Spring 自动添加到模型中。
请参阅 “使用@ModelAttribute” 。