Spring MVC中ModelAndView的Model是什么?

有这个基本function

protected ModelAndView handleRequestInternal(...) { ... return new ModelAndView("welcomePage", "WelcomeMessage", message); } 

我知道这将返回modelandView。 我知道welcomePage是我的viewname,所以这意味着welcomePage就会被调用。

但是我对什么是模型部分感到困惑。 什么是WelcomeMessagemessage以及模型如何在这种情况下工作?

该模型提供了一个占位符来保存要在视图上显示的信息。 它可能是一个string,这是你的上面的例子,或者它可能是一个包含一堆属性的对象。

例1

如果你有…

 return new ModelAndView("welcomePage","WelcomeMessage","Welcome!"); 

…然后在你的jsp中,显示这个消息,你会这样做:

 Hello Stranger! ${WelcomeMessage} // displays Hello Stranger! Welcome! 

例2

如果你有…

 MyBean bean = new MyBean(); bean.setName("Mike!"); bean.setMessage("Meow!"); return new ModelAndView("welcomePage","model",bean); 

然后在你的jsp中,你可以这样做:

 Hello ${model.name}! {model.message} // displays Hello Mike! Meow! 

这一切都由javadoc为构造函数解释。 这是一个便利的构造函数,用一个属性/值对填充模型。

所以…

  new ModelAndView(view, name, value); 

相当于:

  Map model = ... model.put(name, value); new ModelAndView(view, model); 

新的ModelAndView(“welcomePage”,“WelcomeMessage”,消息);

是速记

 ModelAndView mav = new ModelAndView(); mav.setViewName("welcomePage"); mav.addObject("WelcomeMessage", message); 

看上面的代码,你可以看到视图名称是“welcomePage”。 你的ViewResolver(通常在… / WEB-INF / spring-servlet.xml中设置)将把它转换成View。 代码的最后一行在你的模型中设置一个属性(addObject(“WelcomeMessage”,message))。 这就是模型的作用。

在这种情况下,我们在Methodland ModelandView中有3个参数。
根据这个问题,第一个参数很容易从问题中理解。 它表示将显示给客户的视图
另外两个参数就像指针持有者
因此,你可以这样总结

ModelAndView( View,Pointer,Holder );

指针只是指出持有人的信息

Controller使用这个信息绑定View时,在上述过程中,可以使用JSP页面中的指针来访问存储在Holder中的信息,以将相关的信息显示给客户端。
这是受尊重的过程的视觉描绘。

 return new ModelAndView("welcomePage", "WelcomeMessage", message); 

在这里输入图像说明

那么,WelcomeMessage只是消息的variables名称(实际的数据模型)。 基本上,你在这里绑定的模型与welcomePage。 模型(消息)将作为WelcomeMessage在welcomePage.jsp中可用。 这是一个更简单的例子:

 ModelAndView("hello","myVar", "Hello World!"); 

在这种情况下,我的模型是一个简单的string(在应用程序中,这将是一个POJO,为数据库或其他来源提供数据)。 我将它分配给myVar,我的视图是hello.jsp。 现在,myVar在hello.jsp中可用,我可以用它来显示。

在视图中,您可以访问数据:

 ${myVar} 

同样,您将能够通过WelcomeMessagevariables访问模型。

ModelAndView:名称本身解释了它是包含Model和View数据的数据结构。

 Map() model=new HashMap(); model.put("key.name", "key.value"); new ModelAndView("view.name", model); // or as follows ModelAndView mav = new ModelAndView(); mav.setViewName("view.name"); mav.addObject("key.name", "key.value"); 

如果模型只包含单个值,我们可以写成如下:

 ModelAndView("view.name","key.name", "key.value");