java - 为什么我们不应该同时使用 jspViewResolver 和 TilesViewResolver 呢?

标签 java spring spring-mvc tiles apache-tiles

我使用 Tiles 项目创建了 Spring MVC。

我的 Controller 返回一个字符串“hello”,它是一个逻辑文件名,我有一个名为 hello.jsp 的 jsp。

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

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

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

最佳答案

两者都是TilesViewResolverInternalResourceViewResolverUrlBasedViewResolver 的实例。一般来说,这意味着 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/

相关文章:

spring - 无法导入Spring RepositoryRestResource

Java 程序不一定从 main() 开始,对吧?

java - 跨平台收集当前服务器信息

java - 如何从 POST 请求获取 XML 并在 Servlet Filter 中修改它?

java - 如何从 jUnit 测试访问 Spring @Service 对象

java - 无法从 JAR 文件中读取 TLD "META-INF/c.tld"

java - 编码问题?????代替字母

java - Maven 中 pluginManagement 的范围 & reporting.plugins.plugin.version 缺少警告

java - Avro 1.9.0 无法编译生成的 java 代码,错误消息为 : cannot find symbol method customEncode(org. apache.avro.io.Encoder)

java - 在 vmware vfabric tc 服务器中部署 maven/spring 应用程序时出现异常