【问题标题】:What are the differences between Model, ModelMap, and ModelAndView?Model、ModelMap、ModelAndView有什么区别?
【发布时间】:2013-08-31 10:52:54
【问题描述】:

以下Spring Framework 类之间的主要区别是什么?

  • Model
  • ModelMap
  • ModelAndView

使用Model.put(String,Object) 我们可以访问.jsp 文件中的值,但ModelMap.addAttribute(String,Object) 也做了同样的事情。我不明白这些类之间的区别。

【问题讨论】:

    标签: spring spring-mvc


    【解决方案1】:

    Model 是一个接口,而ModelMap 是一个类。

    ModelAndView 只是ModelMap 和视图对象的容器。它允许控制器将两者都作为单个值返回。

    【讨论】:

    • 在四处挖掘之后,我发现使用 ModelMap 的最佳原因(有点隐藏在 vikas harle 的答案中,示例中未显示)是,在向 ModelMap 添加属性时,您可以省略属性名(key),spring会根据属性值生成属性key。 docs.spring.io/spring/docs/4.3.14.RELEASE/…
    • 那么,返回ModelAndView有什么意义和不同呢?在返回 String 并让 ViewResolver 获取相应视图页面的情况下,您仍然只返回一种类型 - 它是字符串(视图名称),模型正在由 DispatcherServlet 隐式处理.. 用例区别是什么?
    【解决方案2】:

    Model、ModelMap 和 ModelAndView 的区别

    模型:它是一个接口。它定义了模型属性的持有者,主要用于向模型添加属性。

    例子:

    @RequestMapping(method = RequestMethod.GET)
        public String printHello(Model model) {
              model.addAttribute("message", "Hello World!!");
              return "hello";
           }
    

    ModelMap:在构建模型数据以供 UI 工具使用时使用 Map 的实现。支持链式调用和模型属性名称的生成。

    例子:

    @RequestMapping("/helloworld")
    public String hello(ModelMap map) {
        String helloWorldMessage = "Hello world!";
        String welcomeMessage = "Welcome!";
        map.addAttribute("helloMessage", helloWorldMessage);
        map.addAttribute("welcomeMessage", welcomeMessage);
        return "hello";
    }
    

    ModelAndView:这个类只是为了让控制器能够在一个返回值中同时返回模型和视图。

    例子:

    @RequestMapping("/welcome")
    public ModelAndView helloWorld() {
            String message = "Hello World!";
            return new ModelAndView("welcome", "message", message);
        }
    

    【讨论】:

    • 我们应该在方法参数中添加Model还是ModelMap,以便在视图中访问它。
    • 你的第二个例子没有显示ModelModelMap之间的区别...两个例子都是一样的。
    【解决方案3】:

    Model:是一个接口,它包含四个addAttribute和一个merAttribute方法。

    ModelMap:实现Map接口。它还包含 Map 方法。

    ModelAndView:正如 Bart 解释的那样,它允许控制器将两者都作为单个值返回。

    【讨论】:

    • “merAttribute”实际上是指“mergeAttributes”吗?此外,没有“四个 addAttribute”方法。相反,有四种添加属性的方法,至少就 Spring 框架的 5.0.4 版本而言。我也对第二行中的“映射方法”语句感到困惑。那是指从 java.util.Map 继承的方法还是别的什么?
    猜你喜欢
    • 1970-01-01
    • 2021-07-27
    • 2014-04-01
    • 1970-01-01
    • 2015-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-05
    相关资源
    最近更新 更多