Java 控制器上@ModelAttribute注释的用途是什么

Java 控制器上@ModelAttribute注释的用途是什么,java,spring,spring-mvc,Java,Spring,Spring Mvc,我有一个如下所示的控制器 @RequestMapping("/getList") public ModelAndView getNetAllList(@ModelAttribute MYObject myObj) { //my code here } 我通过表单提交将此控制器称为 <form name="myForm" th:action="@{/getList}" th:object="${myObjVO}" method="post" 使用@modeldattrib

我有一个如下所示的控制器

@RequestMapping("/getList")
    public ModelAndView getNetAllList(@ModelAttribute MYObject myObj)  {

//my code here

}
我通过表单提交将此控制器称为

<form name="myForm"  th:action="@{/getList}" th:object="${myObjVO}" method="post"

使用
@modeldattribute
将对象映射到模型,通常用于初始化具有默认值的表单

在这种情况下,视图中属性的名称(“myObjVO”)与模型中创建的属性(“myObj”)不匹配。因此,当调用该方法时,将发送myObjVO属性并替换myObj

总之,没有必要使用
@modeldattribute
,因为表单是在视图中启动的,并且它没有与在模型中创建的表单映射。

我想这回答了您的问题

。。。还添加了一个回退策略,从中实例化模型属性 URI模板变量,如果名称为 匹配模型属性名称,并且存在适当的类型 转换策略


@modeldattribute
注释可以在方法和参数级别使用。在方法级别,它可用于在使用任何
@RequestMapping
方法之前配置模型属性。在参数级别,它可以用于过滤表单中的特定属性(例如,应该从一组表单属性构造的Employee元素)。有关如何使用它的更多信息,请参阅

@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自动添加到模型中

作为方法参数

当用作方法参数时,它指示该参数应为 从模型中检索。当不存在时,它应该是第一个 实例化,然后添加到模型中,一旦出现在 模型中,应根据所有请求填充参数字段 具有匹配名称的参数

在employee model属性后面的代码段中 填充来自提交给addEmployee端点的表单的数据。 SpringMVC在调用submit之前会在后台执行此操作 方法:

在本文后面,我们将看到一个完整的示例,说明如何使用 用于填充employeeView模板的employee对象

因此,它将表单数据与bean绑定。控制器已添加注释 @RequestMapping

可以使用@modeldattribute注释自定义类参数


这就是SpringMVC中通常所说的数据绑定,它是一种常见的 使您不必解析每个表单字段的机制 个别地

通常,Spring MVC总是首先调用该方法, 在调用任何请求处理程序方法之前。即@modeldattribute 方法在用注释的控制器方法之前调用 @请求映射被调用。这个序列背后的逻辑是, 必须在内部开始任何处理之前创建模型对象 控制器方法


首先,我认为你的代码不起作用。只有选择以下任一解决方案,它才会起作用

解决方案1

@RequestMapping("/getList")
    public ModelAndView getNetAllList(@ModelAttribute("myObjVO") MYObject myObj)  {

//my code here

}

<form name="myForm"  th:action="@{/getList}" th:object="${myObjVO}" method="post">
@RequestMapping(“/getList”)
公共模型和视图getNetAllList(@ModelAttribute(“myObjVO”)MYObject myObj){
//我的代码在这里
}
解决方案2:

@RequestMapping("/getList")
    public ModelAndView getNetAllList( MYObject myObj)  {

//my code here

}

<form name="myForm"  th:action="@{/getList}" th:object="${myObject}" method="post">
@RequestMapping(“/getList”)
公共模型和视图getNetAllList(MYObject MYObject){
//我的代码在这里
}
如果仔细查看这些解决方案,您将知道何时需要
@modeldattribute

现在回到你的问题

仅仅使用bean作为参数,不需要
@modeldattribute
<代码>模型属性
用于各种其他用途。阅读文档,并从答案中检查以下两项


有人能帮我回答我的问题吗?你认为你的答案是对的。我希望我能投票否决你的答案。是的,我认为我的答案意味着你不需要使用它,但如果你选择使用它,那么它就是这样做的。如果我帮不上忙,很抱歉。我知道它的作用。我的问题是,现在它是可选的吗?我知道它是用来做什么的。我的问题是,它现在是可选的吗?我的问题是,“是否不再需要使用此注释”。因为我的代码在不使用此注释的情况下工作。这就是Spring MVC中通常所称的数据绑定,这是一种常见的机制,可以避免您单独解析每个表单字段。一般来说,SpringMVC将始终使用@ModelAttribute。这是客户注释。这是我的答案。你需要阅读内容。
@RequestMapping("/getList")
    public ModelAndView getNetAllList( MYObject myObj)  {

//my code here

}

<form name="myForm"  th:action="@{/getList}" th:object="${myObject}" method="post">