Spring MVC中的@ModelAttribute是什么?
Spring MVC中@ModelAttribute
的用途和用途是什么?
@ModelAttribute
是指Model对象(MVC中的M)的一个属性,所以假设我们有一个名为“Person”的表单支持对象的表单。然后,您可以通过使用Spring MVC将此对象提供给Controller方法@ModelAttribute
注解:
public String processForm(@ModelAttribute("person") Person person){
person.getStuff();
}
在这里查看一个例子(Spring 2.5),另请参阅“在方法参数上使用@ModelAttribute”(Spring 3.1)。
另一方面,注释用于定义应该是模型的一部分的对象。 所以如果你想在模型中引用一个Person对象,你可以使用下面的方法:
@ModelAttribute("person")
public Person getPerson(){
return new Person();
}
这个带注释的方法将允许访问View中的Person对象,因为它被Spring自动添加到模型中。
请参阅“在方法上使用@ModelAttribute”(Spring 3.1)。
希望这有助于。
我知道这是一条古老的线,但我认为我把我的帽子扔在戒指里,看看我是否可以把水弄得更加泥泞:)
我发现我最初理解@ModelAttribute
是Spring决定将几个注释合并为一个的结果。 一旦我将它分成几个较小的注释,就会变得更加清晰:
对于参数注释,可以将@ModelAttribute
看作@Autowired + @Qualifier
的等价物,即它试图从Spring托管模型中检索具有给定名称的bean。 如果没有找到命名的bean,而不是抛出错误或返回null
,它隐式地承担@Bean
的角色,即使用默认构造函数创建一个新实例,并将该bean添加到模型中。
对于方法注释,想@ModelAttribute
为相当于@Bean + @Before
,即它把用户的模型代码构造的豆,它总是一个请求处理方法之前调用。
形象地说,我看到@ModelAttribute
如下(请不要从字面上理解!!):
@Bean("person")
@Before
public Person createPerson(){
return new Person();
}
@RequestMapping(...)
public xxx handlePersonRequest( (@Autowired @Qualifier("person") | @Bean("person")) Person person, xxx){
...
}
正如你所看到的,Spring做出了正确的决定,使@ModelAttribute
成为一个包罗万象的注解; 没有人想看到一个注释大杂烩。
对于我的风格,我总是使用@ModelAttribute从spring窗体jsp中捕捉对象。 例如,我在jsp页面上设计表单,该表单存在于commandName中
<form:form commandName="Book" action="" methon="post">
<form:input type="text" path="title"></form:input>
</form:form>
我用跟随代码捕捉控制器上的对象
public String controllerPost(@ModelAttribute("Book") Book book)
并且书的每个字段名都必须与表单的子元素中的路径匹配
链接地址: http://www.djcxy.com/p/67365.html