使用ViewResolver接口解析视图
正如在21.3 控制器的实现一节中所讨论的,Spring MVC中所有控制器的处理器方法都必须返回一个逻辑视图的名字,无论是显式返回(比如返回一个String
、View
或者ModelAndView
)还是隐式返回(比如基于约定的返回)。Spring中的视图由一个视图名标识,并由视图解析器来渲染。Spring有非常多内置的视图解析器。下表列出了大部分,表后也给出了一些例子。
表21.3 视图解析器
视图解析器 | 描述 |
| 一个抽象的视图解析器类,提供了缓存视图的功能。通常视图在能够被使用之前需要经过准备。继承这个基类的视图解析器即可以获得缓存视图的能力。 |
| 视图解析器接口 |
| 视图解析器接口 |
|
|
|
|
|
|
| 视图解析器接口 |
我们可以举个例子,假设这里使用的是JSP视图技术,那么我们可以使用一个基于URL的视图解析器UrlBasedViewResolver
。这个视图解析器会将URL解析成一个视图名,并将请求转交给请求分发器来进行视图渲染。
若返回一个test
逻辑视图名,那么该视图解析器会将请求转发到RequestDispatcher
,后者会将请求交给/WEB-INF/jsp/test.jsp
视图去渲染。
如果需要在应用中使用多种不同的视图技术,你可以使用ResourceBundleViewResolver
:
ResourceBundleViewResolver
会检索由bundle根路径下所配置的ResourceBundle
,对于每个视图而言,其视图类由[viewname].(class)
属性的值指定,其视图url由[viewname].url
属性的值指定。下一节将详细讲解视图技术,你可以在那里找到更多例子。你还可以看到,视图还允许有基视图,即properties文件中所有视图都“继承”的一个文件。通过继承技术,你可以为众多视图指定一个默认的视图基类。
AbstractCachingViewResolver
的子类能够缓存已经解析过的视图实例。关闭缓存特性也是可以的,只需要将cache
属性设置为false
即可。另外,如果实在需要在运行时刷新某个视图(比如修改了Velocity模板时),你可以使用removeFromCache(String viewName, Locale loc)
方法。`
Last updated