自定义标签学习记录

来源:互联网 发布:拜见女皇陛下 知乎 编辑:程序博客网 时间:2024/06/03 22:43

1、编写一个tld文件 文件内容如下

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN" "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">
<taglib xmlns="http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd"> //固定文件头
    <tlibversion>1.0</tlibversion> //标签库的版本
    <jspversion>1.1</jspversion> //这个标签库要求的JSP规范版本
    <shortname>test</shortname> //JSP页面编写工具可以用来创建助记名的可选名字
    <uri>http://ep.jsp.tags/tags-1.0</uri> //唯一标识该标签库的的URI
    <info>my test tag</info>  //相关信息
    <tag>
        <name>csajsp</name> //标签名称
        <tagclass>testTag</tagclass>  //标签handler类的完全限定名
        <bodycontent>jsp</bodycontent> //没有正文的标签必须用body-content元素声明它们的正文内容是空的:
        <attribute> //属性
            <name>example</name> //属性名称
            <required>false</required> //属性值是否必须提供。False表示不必,存在缺省值。
            <rtexprvalue>true</rtexprvalue>>;//ture表示属性值可以使用jsp表达式,false表示禁止使用
        </attribute>
    </tag>
</taglib>


2、在jsp中的引用
<%@ taglib uri = “csajsp-taglib.tld” prefix = “csajsp” %>; //进行标记使用声明
<H1><csajsp:example /><H1>; /使用标记

3、编写handler类

标签handler类型
方法

简单标签 (<csajsp:example />)
doStartTag, doEndTag, release

属性
doStartTag, doEndTag, set/getAttribute1...N, release

正文、判断且无交互 (<csajsp:example message="hello">students</csajsp:example>)
doStartTag, doEndTag, release

正文、迭代判断
doStartTag, doAfterBody, doEndTag, release

正文、交互
doStartTag, doEndTag, release, doInitBody, doAfterBody, release

 

简单标签的handler必须实现Tag接口的doStartTag和doEndTag方法。
在遇到开始标签时调用doStartTag方法。因为简单标签没有正文,
所以这个方法返回SKIP_BODY。在遇到结束标签时调用doEndTag方法。
如果要对页面的其他部分进行判断,则doEndTag方法需要返回EVAL_PAGE,
否则,它就返回SKIP_PAGE。


<tt:simple />

由下列标签handler实现:

public SimpleTag extends TagSupport {
    public int doStartTag() throws JspException {
        try {
           pageContext.getOut().print("Hello.");
        } catch (Exception ex) {
            throw new JspTagException("SimpleTag: " + ex.getMessage());
        }
        return SKIP_BODY;
    }
    public int doEndTag() {
        return EVAL_PAGE;
    }
}

body-content元素
没有正文的标签必须用body-content元素声明它们的正文内容是空的:

<body-content>empty</body-content>

 

原创粉丝点击