model.addAttribute("name",value) 和 mv.addObject("name",value) 有什么区别?(涉及IT技术)

6

在Spring MVC中,model.addAttribute("name", value)mv.addObject("name", value)有何区别?

modelModel类型,而mvModelAndView类型。

它们本质上是相同的,都可以将一个名称-值对添加到视图中。但是,mv.addObject()方法可以返回一个ModelAndView实例,从而可以更灵活地设置视图和模型属性。


这些类是否在标准的Java API中找到?如果不是,也许你应该指定这些类的来源。 - Josh M
@Josh Model 是由 Spring MVC 提供的一个接口。 - Sotirios Delimanolis
2个回答

6

Model#addAttribute(String, Object)指出:

在给定的名称下添加提供的属性。

ModelAndView#addObject(String, Object)则解释为:

向模型中添加属性。

如果您查看addObject的源代码,您会发现它实际上是调用了Model#addAttribute()。因此,这两个方法的行为是相同的。

public ModelAndView addObject(String attributeName, Object attributeValue) {
    getModelMap().addAttribute(attributeName, attributeValue);
    return this;
}

他委托给Model引用,这是一个ModelAndView对象,并在其上调用addAttribute()


所以它们基本上做同样的事情,对吗?除了返回语句。 - Kevin Bowersox
@KevinBowersox 并不完全相同。这两个类有不同的用途,但最终结果是相同的:将提供的名称的模型对象添加到模型中。 - Sotirios Delimanolis
这就是我想达到的目的。有趣的是我从不知道这些方法可以返回模型或 mav,所以它们可以链接。 - Kevin Bowersox

3

Model 是一个仅持有模型属性的容器。

ModelAndView 是一个持有模型和视图的容器,这样控制器可以一并返回模型和视图。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接