JspTaglib ["http://tiles.apache.org/tags-tiles"] 未定义:不能分配给瓷砖
Posted
技术标签:
【中文标题】JspTaglib ["http://tiles.apache.org/tags-tiles"] 未定义:不能分配给瓷砖【英文标题】:JspTaglib ["http://tiles.apache.org/tags-tiles"] is undefined: It cannot be assigned to tiles 【发布时间】:2017-06-19 05:18:51 【问题描述】:我正在对一个非常旧的 Java 项目进行更新转换,并在 Spring Boot 下对其进行转换。但是,我在渲染首页时遇到了困难,因为它们是使用 Struts 2 构建的,.ftl
使用 Apache Tiles。
由于某种原因,我收到此错误 JspTaglibs 未定义。当它尝试加载页面时,它无法分配给磁贴。
我已经检查了我是否拥有所有必需的 jar
文件(我认为?),但由于我对 .ftl
或瓷砖一点也不熟悉,我无法帮助自己找出问题所在.
依赖关系:
<dependency>
<groupId>org.apache.tiles</groupId>
<artifactId>tiles-core</artifactId>
<version>2.2.2</version>
</dependency>
<dependency>
<groupId>org.apache.tiles</groupId>
<artifactId>tiles-api</artifactId>
<version>2.2.2</version>
</dependency>
<dependency>
<groupId>org.apache.tiles</groupId>
<artifactId>tiles-jsp</artifactId>
<version>2.2.2</version>
</dependency>
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>2.1.8.1</version>
</dependency>
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-tiles-plugin</artifactId>
<version>2.1.8</version>
</dependency>
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.15</version>
</dependency>
我正在像这样将图块分配给页面
<#assign tiles=JspTaglibs["http://tiles.apache.org/tags-tiles"]>
<@tiles.insertAttribute name="navigation" />
<@tiles.insertAttribute name="body" />
【问题讨论】:
有什么困难?freemarker.core.InvalidReferenceException: Error on line 33, column 1 in layout/layout.ftl JspTaglibs["http://tiles.apache.org/tags-tiles"] is undefined. It cannot be assigned to tiles
似乎是我遇到的错误
【参考方案1】:
将此添加到您的web.xml
或使用 Spring Boot 引导此 servlet。
<servlet>
<servlet-name>jspSupportServlet</servlet-name>
<servlet-class>org.apache.struts2.views.JspSupportServlet</servlet-class>
<load-on-startup>5</load-on-startup>
</servlet>
Struts 2 中需要将 Freemarker 与 Tiles 集成。
您可以使用演示这种集成的struts-examplestiles 项目。同时升级到最新的 Struts 版本。
您可以在pom.xml
中找到该项目的明智之处。
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<struts2.version>2.5.8</struts2.version>
</properties>
【讨论】:
谢谢罗曼的回答。我实际上在我的 web.xml 中有那个部分。现在我更仔细地查看了这个错误,我觉得很愚蠢。它实际上是 Jetty 之前造成的,这只是它的结果。虽然我还不知道如何修复它...java.lang.IllegalStateException: Committed at org.eclipse.jetty.server.Response.resetBuffer(Response.java:1242) ~[jetty-server-9.2.19.v20160908.jar:9.2.19.v20160908] at org.eclipse.jetty.server.Response.sendError(Response.java:567) ~[jetty-server-9.2.19.v20160908.jar:9.2.19.v20160908]
您没有尝试此答案中的示例。码头版本是8.1.16.v20140903
我试图从您的链接中检查磁贴示例,而我的 web.xml 与使用 <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
并带有一些参数而不是 org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter
的异常部分基本相同
我还更新了我的 struts 和 freemarker 版本并开始使用 StrutsPrepareAndExecuteFilter,但这似乎不是问题
我不知道是什么问题,除了 2.5.9-SNAPSHOT 版本无法从 Maven 中心下载。至少它没有配置为默认下载快照并使用仅发布模式。以上是关于JspTaglib ["http://tiles.apache.org/tags-tiles"] 未定义:不能分配给瓷砖的主要内容,如果未能解决你的问题,请参考以下文章
使用 cxf-spring-boot-starter-jaxrs 的 Spring Boot 应用程序中的指标 http_server_requests_seconds_count 包含 uri 作为
Grafana 使用 http_server_requests_seconds_count 绘制每分钟的 HTTP 请求数