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 与使用 &lt;filter-class&gt;org.apache.struts2.dispatcher.FilterDispatcher&lt;/filter-class&gt; 并带有一些参数而不是 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 作为

排序算法之快速排序Java实现

http://t.cn/xxxxx的短链接如何生成?

214. Spring Security:概述

Grafana 使用 http_server_requests_seconds_count 绘制每分钟的 HTTP 请求数

php pagerank checker脚本