我使用 Tiles 项目创建了 Spring MVC。
我的 Controller 返回一个字符串“hello”,它是一个逻辑文件名,我有一个名为 hello.jsp 的 jsp。
在tiles.xml 中,我应该有一个名为hello 的定义,它扩展了定义模板。 我的基本定义映射到layout.jsp。
当我添加 jspViewResolver 时,它会将我带到 hello.jsp,但如果我将其注释掉,它会将我带到基于tiles.xml 中 hello 的定义呈现的layout.jsp。
那么,为什么我们不应该同时使用jspViewResolver和tilesViewResolver呢?
最佳答案
两者都是TilesViewResolver
和 InternalResourceViewResolver
或 UrlBasedViewResolver
的实例。一般来说,这意味着 ViewResolver
获取给定的 View 名称并尝试从中构造一个 URL,该 URL 用于解析 View ,无论 View 的实际存在如何。
根据 Spring 版本 (Spring >= 3.0) 和使用的子类,将进行检查以检查 View 的实际存在。 (请参阅 this 已解决的问题)。
唯一不实际检查 View 是否存在(目前)的实现是 InternalResourceViewResolver
或普通 UrlBasedViewResolver
实例。使用此属性时,请使其成为 View 解析器链中的最后一个(最高 order
属性)。
当您想要将纯 JSP 与 Tiles 结合起来时,实际上可以通过将 TilesViewResolver
的阶数指定为 1,将 InternalResourceViewResolver
的阶数指定为高于 1(2 表示实例)。
在早期版本(Spring < 3.0)中,这些检查没有到位,因此排序不会产生任何效果。
关于java - 为什么我们不应该同时使用 jspViewResolver 和 TilesViewResolver 呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25965479/