为什么我们不能同时使用jspViewResolver和TilesViewResolver?

时间:2014-09-22 01:13:16

标签: java spring spring-mvc tiles apache-tiles

我用Tiles项目创建了Spring MVC。

我的控制器返回一个字符串"你好"这是一个逻辑文件名,我有一个名为hello.jsp的jsp。

在tiles.xml中,我应该有一个名为hello的定义,它扩展了定义模板。 我的基本定义映射到layout.jsp。

当我添加jspViewResolver时,它会将我带到hello.jsp,但是如果我将它注释掉它会将我带到layout.jsp,它是根据tiles.xml中的hello定义呈现的。

那么,为什么我们不应该同时拥有jspViewResolver和tilesViewResolver呢?

1 个答案:

答案 0 :(得分:1)

TilesViewResolverInternalResourceViewResolverUrlBasedViewResolver的实例实例。通常,这意味着ViewResolver获取给定的视图名称并尝试构造一个URL,此URL用于解析视图,而不管视图的实际存在。

根据Spring版本(Spring> = 3.0)并使用子类,将进行检查以检查视图的实际存在。 (参见this已解决的问题)。

唯一没有实际检查视图(目前)是InternalResourceViewResolver还是普通UrlBasedViewResolver实例的实现。使用此选项时,请将其作为视图解析器链中的最后一个(最高order属性)。

如果要将普通JSP与Tiles结合使用,实际上可以通过给TilesViewResolver订单1和InternalResourceViewResolver订单高于1(例如2)来实现。

在早期版本(Spring< 3.0)中,这些检查不到位,因此排序不会产生任何影响。