JSTL自定义标签

一、需要一个.java(标签处理类),一个.tld(标签库描述)。

1、标签处理类:

1)需要继承TagSupport或者BodyTagSupport,两者区别在于是否允许带有标签体。

2)标签调用时,首选会执行类内的setter方法,它可以获取标签的属性值。然后标签会调用doStartTagdoEndTag方法。根据返回值的不同,执行不同的动作。以下是常用的几个返回值:

SKIP_BODY: 不处理标签体,直接调用 doEndTagO方法。 
SKIP_PAGE:
忽略标签后面的 JSP 页面。 
EVAL_PAGE:
处理标签结束,直接处理页面内容。 
EVAL_BODY_BUFFERED:
处理标签体。 
EVAL_BODY_INCLUDE:
处理标签体,但忽略 setBodyContentO doInitBodyO方法。 

EVAL_BODY_AGAIN: 对标签体循环处理。

 

2、标签库描述

1)标签库描述是以.tld后缀结尾的文件,其声明如下:<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"

"http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">

2)执行顺序如下:

a.通过标签的前缀找到该标签所对应的uri,该uri并不表示资源的具体位置,而是通过它可以建立与TLD文件中所定义标签的映射。在WEB-INF/下的TLD文件中找到<tag>标签中的<name>对应的<tag-class>,也就是需要创建的类的对象的名字。利用反射机制创建TagDemo的示例。

b.调用TagDemosetXXX()方法,根据JSP页面中属性对应的值对TagDemo对象的属性值进行设置,这样就可以在自己定义的这些类中使用这些属性值了

c.调用TagDemodoStartTagdoEndTag方法,执行用户定义的相关操作。

3)描述结构:

<taglib>

    <tlib-version>1.0</tlib-version>

    <jsp-version>1.1</jsp-version>

    <short-name>xxx</short-name>

    <tag>

        <name>xxx</name>

        <tag-class>xxx</tag-class>

        <body-content>xxx</body-content>

        <attribute>

            <name>xxx</name>

        </attribute>

    </tag>

</taglib>

 

二、自定义标签的使用

1、首先要做的是引入.tld

<%@ taglib prefix="aaa" uri="xxx.tld"%>

prefix="aaa"引用的名称在页面可以使用,就像java中生成的一个对象名,以后调用的时候直接使用<aaa:bbb/>就可以了;uri="xxx.tld"表示标签库的路径,相当于import一个具体的类。

2JSP页面调用自定义标签:<aaa:bbb/>如此即可,详见下方实例。

 

附:自定义标签实例

功能:使用标签可以让字符串S打印n次,Sn为自定义。

1、标签处理类:TagDemo.java

属性name是字符串Stimes是次数n

JSTL自定义标签_第1张图片

 

2、标签库描述:powercms.tld

tag-class:处理类

body-content:正文内容类型

attribute:定义标签属性

Required:该属性是否必须

Rtexprvalue:是否可以用JSP的程序段的结果输出

Type:参数类型


JSTL自定义标签_第2张图片

 

3、调用:sd_test.jspsd_test2.jsp

1sd_test.jsp:设定重复的内容和重复次数

JSTL自定义标签_第3张图片

 

效果:

 

2sd_test2.jsp:调用自定义标签jDemo,将内容重复打印所设定的次数。

JSTL自定义标签_第4张图片

效果:

JSTL自定义标签_第5张图片

 

 

 

你可能感兴趣的:(jstl,自定义标签)