分享

Tag File支持

 KILLKISS 2009-11-23

2.14.3 Tag File支持

Tag File是自定义标签的简化用法,使用Tag File可以无须定义标签处理类和标签库文件,但仍然可以在JSP页面中使用自定义标签。

下面以Tag File建立一个迭代器标签,其步骤如下。

建立Tag文件,在JSP所支持Tag File规范下,Tag File代理了标签处理类,它的格式类似于JSP文件。可以这样理解:如同JSP可以代替Servlet作为表现层一样,Tag File则可以代替标签处理类。

Tag File具有以下5个编译指令。

taglib:作用与JSP文件中的taglib指令效果相同,用于导入其他标签库。

include:作用与JSP文件中的include指令效果相同,用于导入其他JSP或静态页面。

tag:作用类似于JSP文件中的page指令,有pageEncoding、body-content等属性,用于设置页面编码等属性。

attribute:用于设置自定义标签的属性,类似于自定义标签处理类中的标签属性。

variable:用于设置自定义标签的变量,这些变量将传给JSP页面使用。

下面是迭代器标签的Tag File,这个Tag File的语法与JSP语法非常相似。

程序清单:codes\02\2.14\jsp2\WEB-INF\tags\iterator.tag

<%@ tag pageEncoding="GBK" import="java.util.List"%>
<!-- 定义了4个标签属性 -->
<%@ attribute name="bgColor" %>
<%@ attribute name="cellColor" %>
<%@ attribute name="title" %>
<%@ attribute name="bean" %>
<table border="1" bgcolor="${bgColor}" bordercolor="000000">
<tr>
<td><b>${title}</b></td>
</tr>
<!-- 取出request范围的a集合 -->
<%List<String> list = (List<String>)
request.getAttribute("a");
//遍历输出list集合的元素
for (Object ele : list){%>
<tr>
<td bgcolor="${cellColor}">
<%=ele%>
</td>
</tr>
<%}%>
</table>

上面页面代码中的粗体字代码就是Tag File的核心代码,可能细心的读者会发现上面的Tag File并不会输出完整的HTML页面,它只包含一个table元素,即只有一个表格,这是正确的。回忆自定义标签的作用:通过简单的标签在页面上生成一个内容片段。同理,这个Tag File也只负责生成一个页面片段,所以它并不需要输出完整的HTML页面。

Tag File的命名必须遵守如下规则:tagName.tag。即Tag File的主文件名就是标签名,文件名后缀必须是tag。将该文件存在Web应用的某个路径下,这个路径相当于标签库的URI名。笔者将其放在/WEB-INF/tags下,即笔者的标签库路径为/WEB-INF/tags。

在页面中使用自定义标签时,需要先导入标签库,再使用标签。使用Tag File标签与普通自定义标签的用法完全相同,只是在导入标签库时存在一些差异。由于此时的标签库没有URI,只有标签库路径。因此导入标签时,使用如下语法格式:

<%@ taglib prefix="tagPrefix" tagdir="path" %>

其中,prefix与之前的taglib指令的prefix属性完全相同,用于确定标签前缀;而tagdir标签库路径下存放很多Tag File,每个Tag File对应一个标签。

下面是使用Tag File标签的JSP页面代码。

程序清单:codes\02\2.14\jsp2\useTagFile.jsp

<%@ taglib prefix="tags" tagdir="/WEB-INF/tags" %>
<%@ page contentType="text/html;charset=GBK" import="java.util.*"%>
<html>
<head>
<title>迭代器tag file</title>
</head>
<body>
<h2>迭代器tag file</h2>
<%
//创建集合对象,用于测试Tag File所定义的标签
List<String> a = new ArrayList<String>();
a.add("hello");
a.add("world");
a.add("java");
//将集合对象放入页面范围
request.setAttribute("a" , a);
%>
//使用自定义标签
<tags:iterator bgColor="#99dd99" cellColor="#9999cc"
title="迭代器标签" bean="a" />
</body>
</html>

 
 

从上面粗体字代码可以看出,在JSP页面中使用Tag File标签也很简单。在该JSP页面中,使用了如下代码导入标签:

<%@ taglib prefix="tags" tagdir="/WEB-INF/tags" %>
            

即以tags开头的标签,使用/WEB-INF/tags路径下的标签文件处理。在JSP页面中则使用如下代码来使用标签:

<tags:iterator bgColor="#99dd99" cellColor="#9999cc"
title="迭代器标签" bean="a" />

tags表明该标签使用/WEB-INF/tags路径下的Tag File来处理标签;而iterator是标签名,即使用WEB-INF/tags路径下的iterator.tag文件负责处理该标签。useTagFile页面最终的执行效果如图2.43所示。

 
图2.43  使用Tag File的迭代器标签

Tag File是自定义标签的简化。事实上,就如同JSP文件会编译成Servlet一样,Tag File也会编译成Tag处理类,自定义标签的后台依然由标签处理类完成,而这个过程由容器完成。打开Tomcat的work\Catalina\localhost\jsp2\org\apache\jsp\tag\web路径,即可看到iterator_tag.java、iterator_tag.class两个文件,这两个文件就是Tag File所对应的标签处理类。

通过查看iterator_tag.java文件的内容不难发现,Tag File中只有如下几个内置对象:

   request:与JSP脚本中的request对象对应。
 response:与JSP脚本中的response对象对应。
 session:与JSP脚本中的session对象对应。
 application:与JSP脚本中的application对象对应。
 config:与JSP脚本中的config对象对应。
 out:与JSP脚本中的out对象对应。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多