【问题标题】:Invalid tld file, but its the filenametld 文件无效,但其文件名
【发布时间】:2021-12-21 13:29:51
【问题描述】:

我正在 SpringBoot 下创建自定义标记库。我的 taglib 标签是:

<%@taglib prefix="ttl" uri="/WEB-INF/tags/resourceBundle.tld" %>

我根据很多可用的资源创建了一个TLD文件并将它放在/WEB-INF/tags/resourceBundle.tld中,这里是带有uri标签的部分

<taglib>
    <uri>/WEB-INF/tags/resourceBundle.tld</uri>
    ...

但是当我引用标签库时收到此错误消息:

org.apache.jasper.JasperException: Invalid tld file: [/WEB-INF/tags/resourceBundle.tld], see JSP specification section 7.3.1 for more details

但是,我不相信它会被读取,因为它在 TagLibraryInfoImpl::generateTldResourcePath()@281: 中被确定为无效:

    if (uri.endsWith(".jar")) {
       // snip
    } else if (uri.startsWith("/WEB-INF/lib/") || uri.startsWith("/WEB-INF/classes/") ||
            (uri.startsWith("/WEB-INF/tags/") && uri.endsWith(".tld")&& !uri.endsWith("implicit.tld"))) {
        err.jspError("jsp.error.tld.invalid_tld_file", uri);
    }

代码在最后一个 err.jspError 行结束:

        err.jspError("jsp.error.tld.invalid_tld_file", uri);

基本上,如果 URI 以“/WEB-INF/tags”开头(正如许多消息来源所说是强制性的)并以“.tld”结尾,但不是“implicit.tld”,那么 tld 文件是“无效的” - 不用打开文件就可以得出这个结论。

我已更改 uri 以引用不存在的文件,并通过代码(上图)从同一路径获得相同的错误消息。

我已阅读有关该主题的大量文章并查看了一个旧项目,在该项目上我使用了自定义标记库(但它使用了 ANT 和 Spring,我使用的是 Maven 和 SpringBoot),我不知道如何获取我的标记库认可。

谁能告诉我我做错了什么?

【问题讨论】:

    标签: jsp jsp-tags taglib tag-library-descriptor


    【解决方案1】:

    JSP 2.1 specification 声明:

    TLD 文件不应放在 /WEB-INF/classes 或 /WEB-INF/lib 中, 并且不得放在 /WEB-INF/tags 或其子目录中,除非命名为 implicit.tld

    我建议使用另一个目录。

    【讨论】:

    • 显然,我不是高尔夫球手...我发誓我在某人的博客中看到他们必须在 /tags...
    • 确认,谢谢。我现在将浏览我的浏览器历史记录并找到错误的博客。如果消息是“invalid_tld_filepath”而不是“invalid_tld_file”会很有帮助。
    猜你喜欢
    • 2020-05-17
    • 1970-01-01
    • 2017-09-21
    • 1970-01-01
    • 1970-01-01
    • 2021-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多