2010-03-06 83 views
5

我正在開發基於Struts的應用程序。我是Struts新手。我想在JSP頁面中使用由Struts提供的taglib目錄中指定的html標籤。Struts提供的.tld的JSP頁面中的Struts-Taglib指令

但不知道如何使用它。我知道如何使用taglib指令,但是我從源頭知道.tld文件已經在版本1.2.8之後的.jar文件中嵌入。我正在使用Struts版本2.1.8。

我不知道struts-html.tld文件位於哪個.jar文件中。

回答

6

我使用Struts 1.3.10這說明:

  1. 這裏下載最新的支柱庫(http://struts.apache.org/download.cgi#struts1310)。請記住,完整分發是您必須下載的內容,因爲它包含Struts TLD的war文件。
  2. 在您的web應用程序中,將您下載的存檔文件中的所有lib複製到您的/WEB-INF/lib文件夾中。
  3. 對於JSTL庫(與支柱效果很好)去這裏(http://java.sun.com/products/jsp/jstl/
  4. 一旦你有你的Struts TLD的和JSTL TLD的,把他們的/WEB-INF/tld/文件夾下(這必須將位於/ WEB-INF /文件夾)。
  5. 在web.xml中添加以下的東西(的<web-app>元素)

    <jsp-config> 
        <taglib> 
         <taglib-uri>/WEB-INF/struts-bean.tld</taglib-uri> 
         <taglib-location>/WEB-INF/tld/struts-bean.tld</taglib-location> 
        </taglib> 
        <taglib> 
         <taglib-uri>/WEB-INF/struts-html.tld</taglib-uri> 
         <taglib-location>/WEB-INF/tld/struts-html.tld</taglib-location> 
        </taglib> 
        <taglib> 
         <taglib-uri>/WEB-INF/struts-logic.tld</taglib-uri> 
         <taglib-location>/WEB-INF/tld/struts-logic.tld</taglib-location> 
        </taglib> 
        <taglib> 
         <taglib-uri>/WEB-INF/struts-nested.tld</taglib-uri> 
         <taglib-location>/WEB-INF/tld/struts-nested.tld</taglib-location> 
        </taglib> 
        <taglib> 
         <taglib-uri>/WEB-INF/struts-tiles.tld</taglib-uri> 
         <taglib-location>/WEB-INF/tld/struts-tiles.tld</taglib-location> 
        </taglib> 
        <taglib> 
         <taglib-uri>/WEB-INF/sslext.tld</taglib-uri> 
         <taglib-location>/WEB-INF/tld/sslext.tld</taglib-location> 
        </taglib> 
        <taglib> 
         <taglib-uri>/WEB-INF/struts-layout.tld</taglib-uri> 
         <taglib-location>/WEB-INF/tld/struts-layout.tld</taglib-location> 
        </taglib> 
    
        <!-- Sun's JSTL --> 
        <taglib> 
         <taglib-uri>http://java.sun.com/jstl/fn</taglib-uri> 
         <taglib-location>/WEB-INF/tld/fn.tld</taglib-location> 
        </taglib> 
    
        <taglib> 
         <taglib-uri>http://java.sun.com/jstl/fmt</taglib-uri> 
         <taglib-location>/WEB-INF/tld/fmt.tld</taglib-location> 
        </taglib> 
    
        <taglib> 
         <taglib-uri>http://java.sun.com/jstl/fmt-1-0</taglib-uri> 
         <taglib-location>/WEB-INF/tld/fmt-1_0.tld</taglib-location> 
        </taglib> 
    
        <taglib> 
         <taglib-uri>http://java.sun.com/jstl/fmt-rt</taglib-uri> 
         <taglib-location>/WEB-INF/tld/fmt-rt.tld</taglib-location> 
        </taglib> 
    
        <taglib> 
         <taglib-uri>http://java.sun.com/jstl/fmt-1-0-rt</taglib-uri> 
         <taglib-location>/WEB-INF/tld/fmt-1_0-rt.tld</taglib-location> 
        </taglib> 
    
        <taglib> 
         <taglib-uri>http://java.sun.com/jstl/core</taglib-uri> 
         <taglib-location>/WEB-INF/tld/c.tld</taglib-location> 
        </taglib> 
    
        <taglib> 
         <taglib-uri>http://java.sun.com/jstl/core-1-0</taglib-uri> 
         <taglib-location>/WEB-INF/tld/c-1_0.tld</taglib-location> 
        </taglib> 
    
        <taglib> 
         <taglib-uri>http://java.sun.com/jstl/core-rt</taglib-uri> 
         <taglib-location>/WEB-INF/tld/c-rt.tld</taglib-location> 
        </taglib> 
    
        <taglib> 
         <taglib-uri>http://java.sun.com/jstl/core-1-0-rt</taglib-uri> 
         <taglib-location>/WEB-INF/tld/c-1_0-rt.tld</taglib-location> 
        </taglib> 
    
        <taglib> 
         <taglib-uri>http://java.sun.com/jstl/sql</taglib-uri> 
         <taglib-location>/WEB-INF/tld/sql.tld</taglib-location> 
        </taglib> 
    
        <taglib> 
         <taglib-uri>http://java.sun.com/jstl/sql-1-0</taglib-uri> 
         <taglib-location>/WEB-INF/tld/sql-1_0.tld</taglib-location> 
        </taglib> 
    
        <taglib> 
         <taglib-uri>http://java.sun.com/jstl/sql-rt</taglib-uri> 
         <taglib-location>/WEB-INF/tld/sql-rt.tld</taglib-location> 
        </taglib> 
    
        <taglib> 
         <taglib-uri>http://java.sun.com/jstl/sql-1-0-rt</taglib-uri> 
         <taglib-location>/WEB-INF/tld/sql-1_0-rt.tld</taglib-location> 
        </taglib> 
    
        <taglib> 
         <taglib-uri>http://java.sun.com/jstl/x</taglib-uri> 
         <taglib-location>/WEB-INF/tld/x.tld</taglib-location> 
        </taglib> 
    
        <taglib> 
         <taglib-uri>http://java.sun.com/jstl/x-1-0</taglib-uri> 
         <taglib-location>/WEB-INF/tld/x-1_0.tld</taglib-location> 
        </taglib> 
    
        <taglib> 
         <taglib-uri>http://java.sun.com/jstl/x-rt</taglib-uri> 
         <taglib-location>/WEB-INF/tld/x-rt.tld</taglib-location> 
        </taglib> 
    
        <taglib> 
         <taglib-uri>http://java.sun.com/jstl/x-1-0-rt</taglib-uri> 
         <taglib-location>/WEB-INF/tld/x-1_0-rt.tld</taglib-location> 
        </taglib> 
    </jsp-config> 
    

這說明,一旦你打電話從JSP的TLD,你的web應用將尋找匹配<taglib-uri>再看看因爲它在<taglib-location>上的位置並找到相關的班級進行呼叫。

在你的JSP,現在你可以這樣做:

<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> 
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> 
<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> 
<%@ taglib uri="/WEB-INF/struts-layout.tld" prefix="layout"%> 
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %> 
<%@ taglib uri="http://java.sun.com/jstl/fmt" prefix="fmt" %> 
<%@ taglib uri="http://java.sun.com/jstl/fn" prefix="fn" %> 

希望這有助於。

+6

我不做Struts的,所以我不會說什麼,但對於JSTL有**完全沒有必要**提取JAR文件和雜波的'/ WEB-INF'與寬鬆的TLD文件。只需將JAR文件放入'/ WEB-INF/lib'中,並根據TLD文檔在JSP頂部聲明taglib就足以使JSTL正常工作。對於所有其他JSP標籤庫,這也應該是正常的做法:1)將JAR文件放入類路徑中(即'/ WEB-INF/lib'),2)在JSP中聲明'taglib'。就這樣。類似的答案:http://stackoverflow.com/questions/2323645 – BalusC 2010-03-06 21:57:12

+0

謝謝...我不知道.... Geez,我會嘗試你的方法... – 2010-03-07 06:29:39

+0

@BalusC ...那麼什麼MVC框架你使用? – 2010-03-07 06:31:38

1

BalusC正確:您只需要在每個JSP中的/WEB-INF/lib和適當的taglib中的JAR文件。最初讓我感到不快的一件事是敏感的JSP語法;一些元素之間的空間很重要。即使這個問題有

<%@ taglib prefix="stripes" uri="http://stripes.sourceforge.net/stripes.tld" %> 
1

的(對我來說,不可思議)接受的答案,我覺得有必要在它有一個去自己:每條紋documentation,每個taglib的條紋TLD應該的樣子。真正的答案是包含在BalusC的評論和建議流浪.tld文件鋪設在WEB-INF真的很糟糕的意見。我的意圖是使用OP所詢問的Struts2的準確版本(v2.1.8)進行擴展,我從Apache's historical archive下載了這個版本。

  1. 我不知道在哪個.jar文件在struts-html.tld文件的位置。

有在Struts2沒有struts-html.tld - 取而代之的有以下幾點:

  • struts-tags.tld,它駐留在META-INF目錄struts2-core-2.1.8.jar幷包含所有標準Struts標籤,喜歡的人你可以在Struts1中找到struts-html.tld
  • tiles-jsp.tld,它位於META-INF目錄中tiles-jsp-2.0.6.jar,對應於Struts1中的struts-tiles.tld
  • 一些更多的TLD,例如SiteMesh與問題沒有直接關係。

  • 我想使用HTML標記,在Struts提供一個標籤庫目錄中指定,JSP頁面。但不知道如何使用它。我知道如何使用taglib指令,但是我從源頭知道.tld文件已經在版本1.2.8之後的.jar文件中嵌入。

  • 這是正確的。它通常的工作方式如下:

    • 當Servlet容器啓動時,它會遍歷WEB-INF/lib目錄並加載任何.jar發現有文件 - 這是你需要的地方Struts2的庫。
    • 在這些.jar文件中,任何TLD預計將駐留在META-INF目錄中。很顯然,如上所述,這已經是struts2-core-2.1.8.jar的情況,所以沒有什麼需要完成的。
    • 當servlet容器加載TLD時,它會在根元素<taglib>內查找<uri>元素並存儲該TLD與其URI之間的映射。相應地,您的.jsp文件中將使用此URI來引用TLD。

    struts2-core-2.1.8.jar的情況下,URI是/struts-tags,因此你需要引用它在一個.jsp文件像這樣(當然你也可以在prefix屬性改變自己的喜好)...

    <%@ taglib uri="/struts-tags" prefix="s" %> 
    

    ...並隨後將其投入使用,如eg這樣的:

    <s:form action="HelloWorld"> 
        (...) 
    </s:form> 
    
    +1

    那麼,第二次讀它不是S1相關的。加一個完整的答案。 – 2015-08-26 09:11:07