JSP的标签文件

标签文件(tag file)

1.  标签文件介绍
标签文件是JSP2.0新增的功能,标签文件的本质在转译成一个Servlet之后,是一个实现了SimpleTag接口的类,目标是让开发人员可以直接使用JSP语法来制作标签。标签文件是以.tag或者.tagx作为扩展名,如果标签文件中包含了的其他完整或部分片段的标签文件,那么应该以.tagf为扩展名的。标签文件必须存放在WEB-INF目录下,最好是在WEB-INF目录下再新建一个tags目录,然后将所有的标签文件都存放在这里。标签文件可以使用所有的JSP元素,但是不能使用page指令,因为标签文件不一个页面,标签文件多个一个tag指令

2.  标签文件的隐藏属性
标签文件可以使用隐藏属性:request、response、jsContext、session、application、out、config,其中jspContext隐含对象的类型为javax.servlet.jsp.JspContext,它用来管理所有范围的变量,就相当于JSP页面的pageContext隐藏对象一样


3.  标签文件的指令
标签文件中可以使用的主要指令:taglib、include、attribute、variable。

1)<%@ tag display-name="" body-content="" dynamic-attributes="" small-icon="" large-icon="" description="" example="" language="" import="" pageEncoding="" isELIgnored=""> tag指令如同JSP网页的page指令,用来设定标签文件。display-name表示图形化开发工具显示<display-name>所指定的名称;body-content表示可能的值有三种,分别是empty、scriptless、tagdependent、empty。empty为标签中没有主体内容,scriptlet为标签中的主体内容EL、JSP动作元素,但不可以为JSP脚本元素,tagdependent表示标签中的主体内容交由tag自己去处理,默认值为scriptless;dynamic-attributes表示设定标签文件动态属性的名称,当dynamic-attributes设定时,将会产生一个Map类型的集合对象,用来存放属性的名称和值;small_icon表示在图形化开发工具显示<small-icon>所指定的TLD相对路径的小图标,大小为16X16;large-icon表示在图形化开发工具显示<large-icon>所指定的TLD相对路径的大图标,大小为32X32;description表示用来说明此标签文件的相关信息;example表示用来增加更多的标签使用说明,包括标签应用时的范例;language、import、pageEncoding、isELIgnored这些属性与page指令相对应的属性相同。

2)<%@ attribute name="" required="" fragment="" rtexprvalue="" type="" description=""%>这个指令用来设定自定义标签的属性。其中name表示属性的名字;required表示是否为必要,默认为false;rtexprvalue表示属性值是否可以为run-time表达式。如为true,表示属性可用动态的方式来指定,如:<mytag:read num="${param.num}"/>,如为false,则一定要用静态的方式来指定属性值;type表示这个属性的类型,默认值为java.lang.String;description用来说明此属性的相关信息

3)<%@ variable name-given="" name-from-attribute="" alias="" variable-class="" declare="" scope="" desription="">这个指令用来设定标签文件的变量。其中name-given表示直接指定变量的名称;name-from-attribute表示以自定义标签的某个属性值为变量名称;alias表示声明一个局部范围属性,用来接收变量的值;variable-class表示变量的类名称,默认值为java.lang.String;declare表示此变量是否声明默认值为true;scope表示此变量的范围,范围是:AT_BEGIN、AT_END和NESTED,默认值为NESTED;description用来说明此变量的相关信息


4.  标签文件的使用
在引用标签文件的JSP页面必须使用taglib指令<%@ taglib tagdir="/WEB-INF/tags" prefix="r" %>,其中tagdir属性指定标签文件的地址。
使用的自定义标签文件应该遵循<prefix:TagFileName/>模式。如果标签具有主体,则应该跟随具有</prefix:TagFileName>格式的结束标签。也就是说如果在WEB-INF/tags目录下有一个row.tag的标签文件,那么就可以这样来指定<%@ tagdir="/WEB-INF/tags" prefix="r" %>, 调用为<r:row/>

5.  标签文件的示例

/*======= 标签文件row.tag========*/
<%@ tag body-content="empty"%>
<%@ attribute name="items" rtexprvalue="true" required="true"%>
<%@ attribute name="even" fragment="true" required="true"%>
<%@ attribute name="odd" fragment="true" required="true"%>
<%@ taglib uri="
http://java.sun.com/jsp/jstl/core" prefix="c"%>

<c:forEach items="${items}" varStatus="status">
 <c:choose>
  <c:when test="${status.count % 2 == 0}">   
   <jsp:invoke fragment="even" />
  </c:when>
  <c:otherwise>
   <jsp:invoke fragment="odd" />
  </c:otherwise>
 </c:choose>
</c:forEach>

/*======= JSP页面文件index.jsp========*/
<%@ page contentType="text/html;charset=GBK"%>
<%@ taglib tagdir="/WEB-INF/tags" prefix="h"%>
<%@ taglib uri="
http://java.sun.com/jsp/jstl/core" prefix="c"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>测试标签文件</title>
</head>

<body bgcolor="white">
<table>
 <h:row items="1,2,3,4,5,6,7,8,9,10">
  <jsp:attribute name="even">
   <c:set var="counter" value="${counter + 1}" />
   <tr bgcolor="pink">
    <td>${counter}: 偶数行</td>
   </tr> 
  </jsp:attribute>
  <jsp:attribute name="odd">
   <c:set var="counter" value="${counter + 1}" />
   <tr bgcolor="orange">
    <td>${counter}: 奇数行</td>
   </tr> 
  </jsp:attribute>
 </h:row>
</table>
</body>
</html>

没有更多推荐了,返回首页