我正在开发一个Struts
基于应用程序。我是 Struts 的新手。我想在页面中使用html
由 提供的 taglib 目录中指定的 tags 。Struts
JSP
但是不知道怎么用。我知道如何使用 taglib 指令,但我从消息来源得知 .tld 文件在 1.2.8 版本之后已嵌入到 .jar 文件中。我正在使用 Struts 2.1.8 版。
我不知道该struts-html.tld
文件位于哪个 .jar 文件中。
我正在使用 Struts 1.3.10 进行此说明:
/WEB-INF/lib
文件夹中。/WEB-INF/tld/
文件夹下(它必须位于 /WEB-INF/ 文件夹中)。在 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" %>
希望这可以帮助。
即使这个问题有一个(对我来说,难以理解的)被接受的答案,我还是觉得有必要自己去尝试一下。真正的答案包含在 BalusC 的评论中,并且建议.tld
放置在其中的流浪文件WEB-INF
是非常糟糕的建议。我的意图是使用 OP 询问的 Struts2 的确切版本(v2.1.8)对此进行扩展,该版本是我从Apache 的历史存档下载的。
我不知道 struts-html.tld 文件位于哪个 .jar 文件中。
Struts2中没有struts-html.tld
- 取而代之的是以下内容:
struts-tags.tld
,它位于 Struts 的META-INF
目录中struts2-core-2.1.8.jar
并包含所有标准的 Struts 标签,就像您希望struts-html.tld
在 Struts1 中找到的标签一样。tiles-jsp.tld
,它位于 Struts1 的META-INF
目录中tiles-jsp-2.0.6.jar
并对应struts-tiles.tld
于 Struts1 中的内容。我想在 JSP 页面中使用在 Struts 提供的 taglib 目录中指定的 html 标记。但是不知道怎么用。我知道如何使用 taglib 指令,但我从消息来源得知 .tld 文件在 1.2.8 版本之后已嵌入到 .jar 文件中。
那是对的。它通常的工作方式如下:
WEB-INF/lib
目录并加载.jar
它在其中找到的所有文件 - 这是您需要放置 Struts2 库的地方。.jar
文件中,任何 TLD 都应该驻留在META-INF
目录中。显然,如上所述,这已经是 的情况struts2-core-2.1.8.jar
,所以没有什么需要做的。<uri>
在根元素中查找元素<taglib>
并存储该 TLD 与其 URI 之间的映射。相应地,此 URI 在您的.jsp
文件中用于引用 TLD。在 的情况下struts2-core-2.1.8.jar
,URI 是/struts-tags
,因此您需要在这样的.jsp
文件中引用它(当然您可以prefix
根据自己的喜好更改属性)...
<%@ taglib uri="/struts-tags" prefix="s" %>
...然后将其投入使用,例如:
<s:form action="HelloWorld">
(...)
</s:form>
BalusC 是正确的:您只需要 JAR 文件和每个 JSP中/WEB-INF/lib
的正确文件。taglib
一开始让我感到困惑的一件事是敏感的 JSP 语法。一些元素之间的空间很重要。根据 Stripes文档,每个taglib
Stripes TLD 应如下所示:
<%@ taglib prefix="stripes" uri="http://stripes.sourceforge.net/stripes.tld" %>