Model,ModelMap和ModelAndView之间有什么区别?


71

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

  • Model
  • ModelMap
  • ModelAndView

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

Answers:


73

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

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


3
深入研究之后,我发现使用ModelMap的最佳理由(有点埋在vikas harle的答案中,未在示例中显示)是在向ModelMap添加属性时,可以省去属性名称(键),而spring根据属性值生成属性密钥。docs.spring.io/spring/docs/4.3.14.RELEASE/…–
蒂姆(Tim)

那么,返回ModelAndView有什么意义和不同之处呢?在返回String并让ViewResolver提取相应的视图页面的情况下,您仍然仅返回一种类型-它是字符串(视图名称),DispatcherServlet隐式地采用了模型。用例的区别是什么?
Giorgi Tsiklauri,

31

Model,ModelMap和ModelAndView之间的差异

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

例:

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

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

例:

@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以便在视图中访问它。
omkar sirra '10 -10-11

14

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

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

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


“ merAttribute”实际上是指“ mergeAttributes”吗?另外,没有“四个addAttribute”方法。而是,有四种添加属性的方法,至少就Spring框架的5.0.4版本而言。我也对第二行的“ Map method”语句感到困惑。那是指从java.util.Map继承的方法还是其他?
GoldDragonTSU
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.