Spring MVC中@ModelAttribute的目的和用法是什么?
当前回答
在方法层面
1.当注释在方法级别上使用时,它表明了它的目的 方法是添加一个或多个模型属性
@ModelAttribute
public void addAttributes(Model model) {
model.addAttribute("india", "india");
}
在方法参数处 1. 当用作方法参数时,它表示应该从模型检索参数。当不存在时,应该首先实例化,然后添加到模型中,一旦出现在模型中,参数字段应该从所有具有匹配名称的请求参数中填充。因此,它将表单数据绑定到bean。
@RequestMapping(value = "/addEmployee", method = RequestMethod.POST)
public String submit(@ModelAttribute("employee") Employee employee) {
return "employeeView";
}
其他回答
这用于Spring MVC中的数据绑定目的。让你的jsp有一个表单元素,例如
在JSP
<form:form action="test-example" method="POST" commandName="testModelAttribute"> </form:form> .
(Spring Form方法,也可以使用Simple Form元素)
控制器端
@RequestMapping(value = "/test-example", method = RequestMethod.POST)
public ModelAndView testExample(@ModelAttribute("testModelAttribute") TestModel testModel, Map<String, Object> map,...) {
}
现在,当您提交表单时,表单字段值将对您可用。
我知道这是一个老帖子,但我想我把我的帽子扔在戒指里,看看我是否能把水弄浑一点:)
我发现我最初难以理解@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成为一个包罗万象的注释;没有人想看到注释的大杂烩。
对于我的风格,我总是使用@ModelAttribute从spring form 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)
book的每个字段名必须与form子元素中的path匹配
@ModelAttribute只是将jsp字段的值绑定到Pojo类,以执行控制器类中的逻辑。如果您熟悉struts,那么这就像在提交时填充formbean对象。
@ModelAttribute引用Model对象的属性(MVC中的M;) 假设我们有一个表单,它有一个名为Person的表单支持对象 然后你可以让Spring MVC通过使用@ModelAttribute注释将这个对象提供给Controller方法:
public String processForm(@ModelAttribute("person") Person person){
person.getStuff();
}
另一方面,注释用于定义应该成为Model一部分的对象。 所以如果你想在Model中引用Person对象,你可以使用下面的方法:
@ModelAttribute("person")
public Person getPerson(){
return new Person();
}
这个带注释的方法将允许访问视图中的Person对象,因为Spring会自动将它添加到模型中。
参见“使用@ModelAttribute”。
推荐文章
- 如何获得具有已知资源名称的资源id ?
- 在Android上将字符串转换为整数
- 为什么“System.out。”println“工作在Android?
- 在Java中什么时候使用可变参数?
- Mockito的argumentCaptor的例子
- 我如何告诉Spring Boot哪个主类用于可执行jar?
- 如何将Java8流的元素添加到现有的列表中
- 在Java 8中是否可以转换流?
- 不区分大小写的字符串作为HashMap键
- 什么是maven中的“pom”打包?
- 在Java中创建一个自定义事件
- 创建正则表达式匹配数组
- 我如何在Java中初始化一个全零的数组列表?
- 主体、使用者和主体之间的意义和区别是什么?
- 将字节转换为十六进制