2011-05-26 33 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