Spring MVC中ModelAndView的Model是什么?
有这个基本function
protected ModelAndView handleRequestInternal(...) { ... return new ModelAndView("welcomePage", "WelcomeMessage", message); }
我知道这将返回modelandView。 我知道welcomePage
是我的viewname,所以这意味着welcomePage
就会被调用。
但是我对什么是模型部分感到困惑。 什么是WelcomeMessage
和message
以及模型如何在这种情况下工作?
该模型提供了一个占位符来保存要在视图上显示的信息。 它可能是一个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");
- servlet中的<mvc:annotation-driven />和<context:annotation-config />有什么区别?
- 如何在弹簧容器之外使用Spring Data JPA?
- 如何在spring mvc 3中通过注释设置头文件不caching
- Spring Security中angular色与授权的区别
- Spring @Autowired如何工作
- 不区分大小写使用Spring CrudRepository进行查询
- Spring3.2和jboss 7
- javax.servlet.ServletException不能在spring web app中parsing为types
- 如何自定义由Spring Boot隐式使用的Jackson JSON映射器?