2011-05-26 62 views
6

JSP定制标记:我写具有以下TLD我的JSP定制标记缺少DTD/XML模式

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

现在Eclipse的赫利俄斯抱怨说“没有语法限制(DTD或XML模式)的检测文件。”

我知道如何禁用警告,但我想知道如何通过提供DTD或模式信息来解决问题。

通过上面这段XML的方式,我有:

xsi:schemaLocation="http://java.sun.com/xml/ns/javaee web-jsptaglibrary_2_1.xsd" 

,但它似乎并没有帮助。彼得的建议

UPDATE我就在我的窗口>首选项> XML> XML目录来检查,我发现可能适合以下情况:

Entry element: Public 
Location: dtdsAndSchemas/web-jsptaglibrary_1_2.dtd in jar file 
usr/local/eclipse/plugins/org.eclipse.jst.standard.schemas_1.1.0.v201003031644.jar 
URI:  jar:file:/usr/local/eclipse/plugins/org 
    .eclipse.jst.standard.schemas_1.1.0.v201003031644.jar!/dtdsAndSchemas 
    /web-jsptaglibrary_1_2.dtd 
Key type: Public ID 
Key: -//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN 

于是,我就在下面添加到我的TLD :

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" 
"http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_2.dtd"> 

现在我以下错误:在该行发现

多个批注:

  • 必须为元素类型“taglib”声明属性“xsi:schemaLocation”。
  • 必须为元素类型“taglib”声明属性“版本”。
  • 值为“http://java.sun.com/xml/ns/javaee”的属性“xmlns”必须具有值“http://java.sun.com/JSP/ TagLibraryDescriptor”。

  • schema_reference.4:无法读取模式文档 '网络jsptaglibrary_2_1.xsd',因为

    1)找不到文档; 2)文件不能被读取; 3)文档的根元素不是。

  • 元素类型“taglib”的内容必须匹配“(tlib版本,jsp版本,短名称,uri?,显示名称?,小图标?,大图标?,描述?验证?,监听器*,标签+)”。

  • 必须为元素类型“taglib”声明属性“xmlns:xsi”。
+0

我的第一个问题是,你使用Eclipse的Java EE开发人员? – 2011-05-26 06:16:51

+0

是的,我下载了Java EE的包。 – stivlo 2011-05-26 07:32:39

回答

1

如果Eclipse不自动从库拿起XSD,您可以随时手动添加: 窗口>首选项> XML> XML目录

在我的情况下,它已经存在于插件部分。它可能带有一个Eclipse Java EE插件。

+0

谢谢,更新了问题,好像我现在遇到了更多问题:-) – stivlo 2011-05-26 08:05:37

+0

最后我接受了你的回答,因为它回答了我原来的问题,即使我无法使用你的建议,因为它引入了更多问题。 – stivlo 2011-06-25 14:42:28

+0

对不起,我没有回答你的后续问题。它在某个地方迷路了。我会建议完全重新安装Eclipse。看起来好像有什么东西与XML验证程序或J2EE XSD文件完全搞砸了 – Peter 2011-06-28 05:56:51

13

我没有打扰过这个问题一个多月,因为无论如何一切都在Tomcat中工作。最近我尝试了GlassFish和JBoss。虽然GlassFish 3.1.1没有投诉,但由于tld问题,JBoss 7.0拒绝运行该应用程序。与此同时,我还将Eclipse Helios更新为Indigo。

我发现我同时在使用DTD和Schema,这不太好。我放弃了DTD并只保留了Schema。我不得不重新命名一些标签,比如tlibversion为tlib-version,短名称为short-name,bodycontent为body-content,tagclass为tag-class,删除信息标签,我用XML注释代替。我想这可能是更新版本的规格,因为在我遵循的例子中,它们被命名为不带连字符。

之后,所有工作:Eclipse没有再提供任何警告,JBoss完美地运行该应用程序。作为参考,这里是工作的TDI:

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

    <!-- Example from http://www.stardeveloper.com/articles/display.html?article=2001081301&amp;page=1 --> 
    <tag> 
     <name>firstTag</name> 
     <tag-class>obliquid.tag.FirstTag</tag-class> 
     <body-content>empty</body-content> 
     <attribute> 
      <name>name</name> 
      <required>false</required> 
     </attribute> 
    </tag> 

    <!-- Truncate text after maxLength or 80 chars, adding "&amp;hellip;" if the the text was longer --> 
    <tag> 
     <name>ellipsis</name> 
     <tag-class>obliquid.tag.Ellipsis</tag-class> 
     <body-content>scriptless</body-content> 
     <attribute> 
      <name>maxLength</name> 
      <required>false</required> 
     </attribute> 
    </tag> 

</taglib> 
+0

版本2.0似乎不起作用。 2.1很好! – 2013-09-25 11:39:01