繁体   English   中英

春天的@ModelAttribute,model.addAttribute有什么区别?

[英]What is the difference between @ModelAttribute, model.addAttribute in spring?

我是新的学习者。我真的很困惑两个概念之间有什么区别:

  1. @ModelAttribute
  2. model.addAttribute

在下面有两个“用户”的价值。这些是同样的事情吗?我为什么要这样使用? 谢谢你们

@RequestMapping(method = RequestMethod.GET)
public String setupForm(ModelMap model) {
    model.addAttribute("user", new User());
    return "editUser";
}

@RequestMapping(method = RequestMethod.POST)
public String processSubmit( @ModelAttribute("user") User user, BindingResult result, SessionStatus status) {
    userStorageDao.save(user);
    status.setComplete();
    return "redirect:users.htm";
}

在参数上使用时,@ @ModelAttribute行为如下:

方法参数上的@ModelAttribute指示应从模型中检索参数。 如果模型中不存在,则应首先实例化参数,然后将其添加到模型中。 一旦出现在模型中,参数的字段应该从具有匹配名称的所有请求参数中填充。 这在Spring MVC中称为数据绑定,这是一种非常有用的机制,可以使您不必单独解析每个表单字段。 http://docs.spring.io/spring/docs/4.1.0.BUILD-SNAPSHOT/spring-framework-reference/htmlsingle/#mvc-ann-modelattrib-method-args

这是一个非常强大的功能。 在您的示例中,Spring会自动从POST请求填充User对象。

但是,第一种方法只是创建一个User实例并将其添加到Model中。 它可以这样编写,以便从@ModelAttribute中受益:

@RequestMapping(method = RequestMethod.GET)
public String setupForm(@ModelAttribute User user) {
    // user.set...
    return "editUser";
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM