我用Tiles项目创建了Spring MVC。
我的控制器返回一个字符串"你好"这是一个逻辑文件名,我有一个名为hello.jsp的jsp。
在tiles.xml中,我应该有一个名为hello的定义,它扩展了定义模板。 我的基本定义映射到layout.jsp。
当我添加jspViewResolver时,它会将我带到hello.jsp,但是如果我将它注释掉它会将我带到layout.jsp,它是根据tiles.xml中的hello定义呈现的。
那么,为什么我们不应该同时拥有jspViewResolver和tilesViewResolver呢?
答案 0 :(得分:1)
TilesViewResolver
和InternalResourceViewResolver
或UrlBasedViewResolver
的实例实例。通常,这意味着ViewResolver
获取给定的视图名称并尝试构造一个URL,此URL用于解析视图,而不管视图的实际存在。
根据Spring版本(Spring> = 3.0)并使用子类,将进行检查以检查视图的实际存在。 (参见this已解决的问题)。
唯一没有实际检查视图(目前)是InternalResourceViewResolver
还是普通UrlBasedViewResolver
实例的实现。使用此选项时,请将其作为视图解析器链中的最后一个(最高order
属性)。
如果要将普通JSP与Tiles结合使用,实际上可以通过给TilesViewResolver
订单1和InternalResourceViewResolver
订单高于1(例如2)来实现。
在早期版本(Spring< 3.0)中,这些检查不到位,因此排序不会产生任何影响。