Eclipse无法在jar文件中找到tld

时间:2013-08-14 23:00:17

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

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

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

我在mytags.tld文件夹(jar)

中也有一个/META-INF/

打包所有war项目(mytags.jar文件夹中有WEB-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的一切正常。只有日食指责错误。

由于

1 个答案:

答案 0 :(得分: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指令可以完全指定定义特定标记库的TLD文件在WAR文件结构中的名称和物理位置,如下例所示:

<%@ 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使用后,上述两种约定都退回到回退机制。

最近的JSP 2.1规范记录了JSP.7.3.2节中的URI映射:

  

描述标记库的URI通过a映射到TLD资源路径   taglib映射,以及在地图不使用时使用的后备解释   包含URI。 taglib映射是从web.xml中的显式taglib映射构建的   (在JSP.7.3.3节中描述),使用推导出的隐式条目进行扩展   来自Web应用程序中的打包标记库(描述于   部分JSP.7.3.4),以及JSP容器已知的隐式条目。后备   解释的目标是随意使用该机制,如同在开发中一样   Web应用程序的循环;在这种情况下,URI被解释为直接路径   TLD(参见章节JSP.7.3.6.2)。