Spring MVC 中的 ModelMap 与模型

Posted

技术标签:

【中文标题】Spring MVC 中的 ModelMap 与模型【英文标题】:ModelMap vs Model in Spring MVC 【发布时间】:2015-03-27 13:19:21 【问题描述】:

我正在比较 Spring MVC 中的 ModelMap 和 Model。除了第一个是类和第二个接口的明显区别之外有什么区别可以在不同情况下使用一个或另一个更好吗?

它们主要用于相同目的(来自spring MVC 文档):

java.util.Map/org.springframework.ui.Model/ org.springframework.ui.ModelMap 用于丰富隐式模型 暴露在网络视图中。

只有我发现ModelMap 增强了Map,但与Model 的区别仍不清楚。

我可以从 ModelMap javadoc 中得出结论,'Model' 是 java 5 的首选吗?

查看基于 Java-5 的接口变体的模型接口 达到同样的目的。

但是,ModelMap 似乎不会被弃用。但是为什么ModelMap没有实现Model呢?

【问题讨论】:

ExtendedModelMap 正在扩展ModelMap 并实现ModelMap。使用Model 时,您可以链接方法调用,因为大多数方法返回ModelMapModelMap 并非如此。 感谢ExtendedModelMap。 AFAIK 你也可以用ModelMap 链接调用(与我已经注意到的Map 不同)。 啊,是的,你是对的。 ModelMap 也早于 Model 接口。对于该接口,基本上有两种实现,ExtendedModelMapRedirectAttributesModelMap(还有BindingAwareModelMap,它是ExtendedModelMap 的扩展)。对于请求映射方法中的用法,使用哪一种并不重要,尽管我可能会建议使用Model 接口而不是其中一种实现。但这是非常自以为是的:)。 可以在***.com/questions/18486660/…找到类似问题的答案 【参考方案1】:

Model - 定义模型属性持有者的 Java-5 特定接口。主要设计用于向模型添加属性。允许以 java.util.Map 的形式访问整个模型。

简单地说,模型可以提供用于渲染视图的属性。


ModelMap - ModelMap 类基本上是一个 LinkedHashMap。为了方便起见,它添加了一些方法。就像上面的 Model 接口一样,ModelMap 也用于传递值以渲染视图。

ModelMap 的优势在于它使我们能够传递一组值并将这些值视为在 Map 中:

@GetMapping("/printViewPage")
public String passParametersWithModelMap(ModelMap map) 
    map.addAttribute("welcomeMessage", "welcome");
    map.addAttribute("message", "Baeldung");
    return "viewPage";

参考;

https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/ui/Model.html https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/ui/ModelMap.html

【讨论】:

您好,提供的示例代码似乎没有展示“传递值集合”的能力。当我查看 Model 的 API(不是 ModelMap)时,我注意到 Model 还提供名为 add addAllAttributes 的 api,它还允许“传递值的集合”。所以最终,我还是看不出modelMap和Model的区别。

以上是关于Spring MVC 中的 ModelMap 与模型的主要内容,如果未能解决你的问题,请参考以下文章

Spring MVC 向前台页面传值-ModelAndView

springMVC Model ModelMap 和 ModelAndView的区别

Spring MVC----表单标签库

spring mvc怎么处理返回值

Spring MVC json view如何把Model 解析成json 字符串?

Google-GSON 的 Spring MVC 映射视图?