代码之家  ›  专栏  ›  技术社区  ›  Amit

struts提供的.tld的jsp页面中的struts-taglib指令

  •  6
  • Amit  · 技术社区  · 15 年前

    我正在开发一个 Struts 基于应用程序。我对Struts还不熟悉。我想用 html 标记,在由提供的taglib目录中指定 支柱 ,在 JSP 页。

    但不知道怎么用。我知道如何使用taglib指令,但我从源代码中了解到.tld文件在1.2.8版之后嵌入到了.jar文件中。我使用的是Struts版本2.1.8。

    我不知道在哪个.jar文件中 struts-html.tld 文件已找到。

    3 回复  |  直到 9 年前
        1
  •  7
  •   Buhake Sindi Tesnep    9 年前

    我使用Struts 1.3.10来演示:

    1. 在此处下载最新的struts库( http://struts.apache.org/download.cgi#struts1310 )记住,那个 全部分配 因为它包含一个带有struts tld的war文件,所以您必须下载它。
    2. 在Web应用程序上,将下载的存档文件中的所有库复制到 /WEB-INF/lib 文件夹。
    3. 对于jstl库(可以与struts一起工作)请点击这里( http://java.sun.com/products/jsp/jstl/ )
    4. 一旦你有了struts-tld和jstl-tld,就把它们放在 /WEB-INF/tld/ 文件夹(IT) 必须 位于/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,webapp将查找匹配的 <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" %>
    

    希望这有帮助。

        2
  •  2
  •   zb226 Steven Lizarazo    9 年前

    即使这个问题有一个(对我来说,不可理解的)被接受的答案,我也觉得有必要自己去尝试一下。真正的答案包含在Balusc的评论和建议 .tld 文件放在 WEB-INF 很糟糕的建议 . 我的意图是使用操作人员询问的Struts2(v2.1.8)的确切版本对此进行扩展,我从 Apache's historical archive

    1. 我不知道struts-html.tld文件位于哪个.jar文件中。

    没有 struts-html.tld 在Struts2中-有以下内容:

    • struts-tags.tld ,它位于 META-INF 目录 struts2-core-2.1.8.jar 包含 所有标准Struts标记 ,就像你希望在里面找到的那些 struts-html.tld 在STRUTS1中。
    • tiles-jsp.tld ,它位于 美联社 目录 tiles-jsp-2.0.6.jar 对应的是 struts-tiles.tld 在STRUTS1中。
    • 其他一些TLD,例如与问题不直接相关的站点网格。

    1. 我想在jsp页面中使用由struts提供的taglib目录中指定的html标记。但不知道怎么用。我知道如何使用taglib指令,但我从源代码中了解到.tld文件在1.2.8版之后嵌入到了.jar文件中。

    没错。其一般工作方式如下:

    • 当servlet容器启动时,它会查看 WEB-INF/lib 目录并加载任何 .jar 它在那里找到的文件-这是你需要放置struts2库的地方。
    • 在这些里面 罐子 所有TLD都应该位于 美联社 目录。显然如上所述,这已经是 结构2-core-2.1.8.jar ,所以没什么需要做的。
    • 当servlet容器加载tld时,它会查找 <uri> 根元素中的元素 <taglib> 并存储该tld与其uri之间的映射。相应地,此uri用于 .jsp 引用TLD的文件。

    在这种情况下 结构2-core-2.1.8.jar URI是 /struts-tags 因此你需要在 JSP 像这样的文件(当然可以更改 prefix 根据您的喜好…

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

    ……并随后投入使用,例如:

    <s:form action="HelloWorld">
        (...)
    </s:form>
    
        3
  •  1
  •   zb226 Steven Lizarazo    9 年前

    balusc是正确的:您只需要在 /WEB-INF/lib 适当的 taglib 在每个jsp中。一开始让我绊倒的是敏感的jsp语法;一些元素之间的空格很重要。每个条纹 documentation ,每一个 标签库 对于条纹,TLD应该是:

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