Struts – Struts提供的.tld JSP页面中的Taglib指令
我正在开发一个基于Struts
的应用程序。 我是Struts的新手。 我想在JSP
页面中使用由Struts
提供的taglib目录中指定的html
标记。
但不知道如何使用它。 我知道如何使用taglib指令,但我从源代码中了解到.tld文件已经嵌入到版本1.2.8之后的.jar文件中。 我使用的是Struts 2.1.8版。
我不知道struts-html.tld
文件位于哪个.jar文件中。
我在这个例子中使用Struts 1.3.10:
- 在这里下载最新的struts库( http://struts.apache.org/download.cgi#struts1310 )。 请记住, 完整发布是您必须下载的内容,因为它包含带有Struts TLD的war文件。
- 在Web应用程序中,将下载的存档文件中的所有lib复制到
/WEB-INF/lib
文件夹。 - 对于JSTL库(适用于struts),请访问此处( http://java.sun.com/products/jsp/jstl/ )
- 获得Struts TLD和JSTL Tld之后,将它们放在
/WEB-INF/tld/
文件夹下(它必须位于/ WEB-INF /文件夹中)。 -
在web.xml上添加以下内容(在
元素下)/WEB-INF/struts-bean.tld /WEB-INF/tld/struts-bean.tld /WEB-INF/struts-html.tld /WEB-INF/tld/struts-html.tld /WEB-INF/struts-logic.tld /WEB-INF/tld/struts-logic.tld /WEB-INF/struts-nested.tld /WEB-INF/tld/struts-nested.tld /WEB-INF/struts-tiles.tld /WEB-INF/tld/struts-tiles.tld /WEB-INF/sslext.tld /WEB-INF/tld/sslext.tld /WEB-INF/struts-layout.tld /WEB-INF/tld/struts-layout.tld http://java.sun.com/jstl/fn /WEB-INF/tld/fn.tld http://java.sun.com/jstl/fmt /WEB-INF/tld/fmt.tld http://java.sun.com/jstl/fmt-1-0 /WEB-INF/tld/fmt-1_0.tld http://java.sun.com/jstl/fmt-rt /WEB-INF/tld/fmt-rt.tld http://java.sun.com/jstl/fmt-1-0-rt /WEB-INF/tld/fmt-1_0-rt.tld http://java.sun.com/jstl/core /WEB-INF/tld/c.tld http://java.sun.com/jstl/core-1-0 /WEB-INF/tld/c-1_0.tld http://java.sun.com/jstl/core-rt /WEB-INF/tld/c-rt.tld http://java.sun.com/jstl/core-1-0-rt /WEB-INF/tld/c-1_0-rt.tld http://java.sun.com/jstl/sql /WEB-INF/tld/sql.tld http://java.sun.com/jstl/sql-1-0 /WEB-INF/tld/sql-1_0.tld http://java.sun.com/jstl/sql-rt /WEB-INF/tld/sql-rt.tld http://java.sun.com/jstl/sql-1-0-rt /WEB-INF/tld/sql-1_0-rt.tld http://java.sun.com/jstl/x /WEB-INF/tld/x.tld http://java.sun.com/jstl/x-1-0 /WEB-INF/tld/x-1_0.tld http://java.sun.com/jstl/x-rt /WEB-INF/tld/x-rt.tld http://java.sun.com/jstl/x-1-0-rt /WEB-INF/tld/x-1_0-rt.tld
这告诉您,一旦从JSP调用TLD,您的webapp将查找匹配的
然后在
上查找它的位置,并找到要调用的相关类。
在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的评论中,并暗示在WEB-INF
存在的流浪.tld
文件是非常糟糕的建议 。 我的意图是使用OP询问的确切版本的Struts2(v2.1.8)进行扩展,我从Apache的历史档案中下载了该版本。
-
我不知道struts-html.tld文件位于哪个.jar文件中。
Struts2中没有struts-html.tld
– 而是有以下内容:
-
struts-tags.tld
,它驻留在struts2-core-2.1.8.jar
的META-INF
目录中,包含所有标准Struts标记 ,就像你期望在Struts1中的struts-html.tld
中找到的那样。 -
tiles-jsp.tld
,它位于tiles-jsp-2.0.6.jar
的META-INF
目录中,对应于Struts1中的struts-tiles.tld
。 - 更多TLD,例如SiteMesh,与问题没有直接关系。
-
我想在JSP页面中使用由Struts提供的taglib目录中指定的html标记。 但不知道如何使用它。 我知道如何使用taglib指令,但我从源代码中了解到.tld文件已经嵌入到版本1.2.8之后的.jar文件中。
那是对的。 它通常的工作方式如下:
- 当servlet容器启动时,它会查看
WEB-INF/lib
目录并加载它在那里找到的任何.jar
文件 – 这是你需要放置Struts2库的地方。 - 在这些
.jar
文件中,任何TLD都应该驻留在META-INF
目录中。 显然,如上所述,struts2-core-2.1.8.jar
就是这种情况,所以没有什么需要做的。 - 当servlet容器加载TLD时,它会在根元素
查找
元素,并存储该TLD与其URI之间的映射。 相应地,此URI在.jsp
文件中用于引用TLD。
对于struts2-core-2.1.8.jar
,URI是/struts-tags
,因此你需要在这样的.jsp
文件中引用它(当然你可以根据自己的喜好改变prefix
属性)。 。
<%@ taglib uri="/struts-tags" prefix="s" %>
……然后将其投入使用,例如:
(...)
BalusC是正确的:您只需要/WEB-INF/lib
的JAR文件以及每个JSP中的正确taglib
。 最初让我感到震惊的一件事是敏感的JSP语法; 某些元素之间的空格很重要。 根据Stripes 文档 ,Stripes TLD的每个taglib
应如下所示:
<%@ taglib prefix="stripes" uri="http://stripes.sourceforge.net/stripes.tld" %>