2010-03-06 78 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