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

上一篇: What is @ModelAttribute in Spring MVC?

下一篇: How to handle static content in Spring MVC?