ModelAndView 总结

     ModelAndView 类别就如其名称所示,是代表了 Spring Web MVC 程式中呈现画面时所使用 Model 资料物件与 View 资料物件,由于 Java 程式中一次只能返回一个物件,所以 ModelAndView 的作 用封装 这两个物件,以方便您一次返回 Model 与 View 这两个物件。

1. 最简单的 ModelAndView 是持有 View 的名称返回,之后 View 名称被 View resolver,也就是实 作 org.springframework.web.servlet.View 介面的实例解析,例如 InternalResourceView 或 JstlView 等等,最简单的 ModelAndView 建构方式如下:

ModelAndView(String  viewName)

2. 如果您要返回呈现画面时所需的 Model 资料物件,则可以使用 Map 物件来收集呈现资料时所需的 资料,然后在建构ModelAndView 作为建构时的引数,您可以使用下面这个版本的 ModelAndView 建构方法:

ModelAndView(String  viewName, Map model)

3. Map 物件中设定好键(Key)与值(Value),之后可以在要呈现的画面中取出加以显示(例如在 JSP 网页中),如果您要返回一个 Model 资料物件并指定 Model 的名称,则可以使用下面这个 ModelAndView 版本:

ModelAndView(String  viewName, String modelName, Object modelObject)

藉由 modelName,您可以在要 View 的实作类别中取出 Model 资料物件,并根据 View 所使用的技 术来加以显示(可能是 JSP 网页、Pdf 等呈现技术)。

 

ModelAndView 类别也提供实作 View 介面的物件来作为建构时的引数,以下是三个可用的建构方 法版本:

ModelAndView(View view) 
ModelAndView(View  view, Map model)
ModelAndView(View  view, String modelName, Object modelObject)

一个实作 View 的实例例是 org.springframework.web.servlet.view.RedirectView, ModelAndView 预设是使用 转发(Forward)方式来完成请求的结果画面,使用 RedirectView 的 话,则会使用重新导向(Redirect)将请求重导至指定的结果画面 位置,以呈现请求的结果, 例如:

...
public ModelAndView handleRequest(....) ... {
	...
	return new ModelAndView(
	new RedirectView(this.getViewPage()));
}
...

    在这边,viewPage 所设定的位址要是从伺服器网页根目录开始指定,而不是 Web 应用程式的根 目录,所以您的 getViewPage()传回的位址必 须像是/FirstSpringMVC/pages/index.htm 这样的 位址,其中 FirstSpringMVC 是您的 Web 应用程式目录。

   使用转发(Forward)方式的话,网址列上并不会出现被转发的目标位址,而且转发方式是在 Web 应用程式之内进行,可以访问 Web 应用程式所设定的内 部目录,像是 WEB-INF 目录,因而您可 以将一些要控管存取的资源放到 WEB-INF 下,如此使用者就无法直接请求这些资源,而必须透过 DispatcherServlet 与 Controller 的处理与控管,才可以取得这些资源,转发方式只能在 Web 应用程式中进行,不能指定至其它的 Web 应用程式位址。

    使用重新导向(Redirect)的话,Web 应用程式会要求客户端浏览器重新发出一个所指定的请求 位址,也就是实际上相当于客户端重新连接至一个所指定 的位址,因此浏览器的位址列上会出 现被重新导向的资讯,重新导向的请求是由浏览器发出,所以不能访问 Web 应用程式中的隐藏目 录,像是 WEB-INF,重 新导向是重新要求一个网页,所以可以指定至其它的 Web 应用程式位址。

 

转载自http://www.iteedu.com/webtech/j2ee/springdiary/62.php

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值