【问题标题】:Eclipse cannot find tld inside jar fileEclipse 在 jar 文件中找不到 tld
【发布时间】:2013-08-17 02:44:47
【问题描述】:

我有一个包含一些标签文件的 jar 文件。

我的*.tag 文件位于/META-INF/tags/ 文件夹(jar)中

我在/META-INF/ 文件夹(jar)中也有一个mytags.tld

打包所有war 项目(mytags.jarWEB-INF/lib 文件夹内)后,它在JBoss 中工作正常。但是Eclipse还是不能识别标签,报错Can not find the tag library descriptor for "http://www.mycompany.com"


有没有办法让 Eclipse 识别我的标签?


关注来源:

block.tag

<%@tag description="Item do block" pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<%@attribute name="id" required="true" %>
<%@attribute name="label" required="true" %>
<%@attribute name="description" required="false" %>
<%@attribute name="icon" required="false" %>

<div id="${id}" class="block">
    <div class="block-box ${icon}">
        <div class="label">
            <span>${label}</span>
        </div>
        <div class="description">
            ${description}
            <jsp:doBody></jsp:doBody>
        </div>
    </div>
</div>


mytags.tld

<?xml version="1.0" encoding="UTF-8" ?>
<taglib xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
    version="2.1">

    <description>My Tags</description>
    <display-name>MyTags</display-name>
    <tlib-version>1.0</tlib-version>
    <short-name>mytags</short-name>
    <uri>http://www.mycompany.com</uri>

    <tag-file>
        <name>block</name>
        <path>/META-INF/tags/block.tag</path>
    </tag-file>
</taglib>


some.jsp

<%@page contentType="text/html; charset=ISO-8859-1" pageEncoding="UTF-8" %>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@taglib uri="http://www.mycompany.com" prefix="mytags" %> <-- ECLIPSE MARKS ERROR HERE
<!DOCTYPE html>
<html>

    <head>
        <title>Test</title>
    </head>
    <body>
        <mytags:block id="users" label="Users" icon="user">
            <!-- some content -->
        </mytags:block>
    </body>
</html>

但是在 JBoss 中一切正常。只有eclipse指责错误。

谢谢

【问题讨论】:

  • Eclipse 的哪个版本?如果您重新验证 JSP,消息会消失吗?
  • 日食开普勒。不,重新验证 JSP 后消息不会消失
  • 该项目是动态 Web 项目,jar 位于其 WebContent/WEB-INF/lib 文件夹中,还是位于 Java 构建路径中?
  • 该项目是一个动态 Web 项目,但 jar 被引用(在 Java 构建路径中)到 maven 存储库。但我没有使用 m2eclipse。
  • Eclipse 是否可以物理读取这些 jar?

标签: eclipse jsp-tags taglib eclipse-kepler tagfile


【解决方案1】:

现有的错误报告https://bugs.eclipse.org/bugs/show_bug.cgi?id=330405 建议更正错误消息以指向从 web.xml 检测到的 JSP 版本 1.1,这是导致 taglib URI 解释过时的原因。

JSP 标记库文档http://docs.oracle.com/cd/B14099_19/web.1012/b14014/taglibs.htm#i1014427 证实了这一点:

正如 JSP 1.1 规范中首次定义的那样,JSP 页面的 taglib 指令可以在 WAR 文件结构中完全指定定义特定标记库的 TLD 文件的名称和物理位置,如下例所示:

<%@ taglib uri="/WEB-INF/oracustomtags/tlds/mytld.tld" prefix="oracust" %>

[..] 或者,正如自 JSP 1.1 规范以来所定义的那样,taglib 指令可以指定 JAR 文件而不是 TLD 文件的名称和应用程序相关的物理位置

自 JSP 1.2 引入映射标签定义并通过任意 taglib uri 字符串 http://docs.oracle.com/cd/B14099_19/web.1012/b14014/taglibs.htm#i1013109 使用后,上述 2 个约定都退出了回退机制。

最近的 JSP 2.1 规范在 JSP.7.3.2 部分记录了 URI 映射:

描述标签库的 URI 通过 taglib 映射,以及在映射不存在时使用的后备解释 包含 URI。 taglib 映射是从 web.xml 中的显式 taglib 映射构建的 (在 JSP.7.3.3 节中描述)通过推导出的隐式条目进行扩展 来自 Web 应用程序中打包的标签库(在 JSP.7.3.4 节),以及 JSP 容器已知的隐式条目。后备 解释是针对机制的随意使用,如在开发中 Web应用程序的周期;在这种情况下,URI 被解释为指向 TLD(请参阅第 JSP.7.3.6.2 节)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-15
    • 1970-01-01
    • 2017-12-20
    • 2019-03-02
    • 1970-01-01
    • 2015-11-16
    • 2022-06-22
    相关资源
    最近更新 更多