16-自定义标签

一、自定义标签入门

1. 为什么引入标签

    jsp页面作为显示的模板,应尽量使用页面标签来实现,避免写java代码

    如果在jsp页面写java代码,首先会令jsp页面难以阅读,不利于页面排版,其次,作为页面美化人员有可能会看不懂java代码,如果将java代码替换成标签,那么只要是懂html标签的人都能看得懂

 

2. 如何实现自定义标签

   移除jsp页面中的java代码其实很简单,只需要写一个java类实现Tag接口,在java类中实现jsp页面的代码,在tld标签描述文件中针对标签和java类进行映射。

 

案例: 实现标签显示来访者的ip

实现步骤:

    1) 写一个类 IpTag 实现 Tag 接口

    2) 在 WEB-INF 目录下 新建tld文件, 对标签进行描述

    3)在 jsp 页面进行调用

 

二、传统标签

1. Tag接口

    执行流程:

    1)创建对象  初始化

    2)调用setPageContext方法传入表示jsp页面的pageContext

    3)如果有父标签调用 setParent 方法传入父标签

    4)调用 setter 方法为属性赋值

    5)调用 doStartTag 方法

    6)执行标签体 可选

    7)调用 doEndTag 方法

    8)调用release方法释放资源

 

2. 方法的返回值

    Tag.EVAL_BODY_INCLUDE   
执行标签体

    Tag.SKIP_BODY           
跳过标签体 

    Tag.EVAL_PAGE           
执行剩余页面

    Tag.SKIP_PAGE           
跳过剩余页面

 

3. Tag接口的子类

    1) IterationTag 接口

       增加doAfterBody()方法,在方法体执行完毕时被调用

       增加返回值EVAL_BODY_AGAIN 用于执行再次执行标签体

        实现此接口可以实现循环执行标签体

        一般通过继承默认实现类TagSupport来实现该标签

 

    2) BodyTag 接口

       增加setBodyContent(BodyContent b)方法传入标签体

       我们可以通过该方法获得标签体 从而对标签体进行操作

       增加了常量(返回值)
EVAL_BODY_BUFFERED 将标签体缓存

 

tag –> IterationTag --> BodyTag

 

   

4.tld文件

    tld 是 taglib description 的缩写  为标签库描述文件

    通过 tag元素描述一个标签

    <tag>

        <description>Outputs Hello, World</description>

        <name>helloWorld</name>

        <tag-class>cn.itcast.tag.HelloWorldTag</tag-class>

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

    </tag>

    其中 name用于指定标签的名称

    tag-class用于指定标签对应的java类

    body-content用于指定标签对之间可以输入的内容类型

       empty表示空标签,即不能有标签体

       JSP 标签体不为空,可以写jsp脚本

       scriptless 不能写jsp脚本,但可以写表达式和el

       tagdependent  将原始内容提交  忽略el表达式等运算

 

5.标签的属性

    需要在页面标签中使用属性需完成以下步骤:

    1) 在标签类中定义一个属性

    2) 为属性添加 setter 方法

    3) 在tld文件中对属性进行描述

   

实现:

<tag>元素的<attribute>子元素用于描述自定义

标签的一个属性,自定义标签所具有的每个属性

都要对应一个<attribute>元素 。

 

<attribute>

    <description>description</description>

    <name>aaaa</name>

    <required>true</required>

    <rtexprvalue>true</rtexprvalue>

    <type>ObjectType</type>

</attribute>

 

attribute的子元素


元素名


是否必须指定


描     


description



用于指定属性的描述信息。


name



用于指定属性的名称。属性名称是大小写敏感的,并且不能以jsp、_jsp、java和sun开头。


required



用于指定在JSP页面中调用自定义标签时是否必须设置这个属性。其取值包括true和false,默认值为false,true表示必须设置,否则可以设置也可以不设置该属性。


rtexprvalue



rtexprvalue是runtime expression value(运行时表达式)的英文简写,用于指定属性值是一个静态值或动态值。其取值包括true和false,默认值为false,false表示只能为该属性指定静态文本值,例如"123";true表示可以为该属性指定一个JSP动态元素,动态元素的结果作为属性值,例如JSP表达式<%=value
%>。


type



用于指定属性值的Java类型。

 

6. 案例

实现将标签体循环执行指定次数的标签  Loop

 

三、简单标签

1. 简单标签SimpleTag

由于传统标签使用三个标签接口来完成不同的功能,显得过于繁琐,不利于标签技术的推广, SUN公司为降低标签技术的学习难度,在JSP 2.0中定义了一个更为简单、便于编写和调用的SimpleTag接口来实现标签的功能

 

我们可以通过继承 SimpleTagSupport 类来实现该接口

 

方法详解:

setJspContext方法

用于把JSP页面的pageContext对象传递给标签处理器对象

setParent方法

用于把父标签处理器对象传递给当前标签处理器对象

getParent方法

用于获得当前标签的父标签处理器对象

setJspBody方法

用于把代表标签体的JspFragment对象传递给标签处理器对象

doTag方法

用于完成所有的标签逻辑,包括输出、迭代、修改标签体内容等。在doTag方法中可以抛出javax.servlet.jsp.SkipPageException异常,用于通知WEB容器不再执行JSP页面中位于结束标记后面的内容,这等效于在传统标签的doEndTag方法中返回Tag.SKIP_PAGE常量的情况。

 

方法的调用顺序?

 

 

2. 开发案例

开发<c:if>标签

 

开发<c:if><c:else>标签

     choose  when otherwise

开发迭代标签

    foreach

开发html转义标签

 

打包标签库

 

时间: 2024-09-20 07:29:08

16-自定义标签的相关文章

freemarker 自定义标签,生成静态页

问题描述 在页面上应用自定义标签,通过freemarker便可生成静态页面,谁有这方便的资料,希望快点共享一下爱吧!!!!就是和它http://topic.csdn.net/u/20090611/16/e82c88f3-70b8-457b-b898-b125a5da65c1.html的问题差不离,到我的标签是<cur:ss............../>,望大家多多参与,有待解决

tomcat5.5和6.0对自定义标签的支持

问题描述 没辙了.在建了个web工程就加了javax.servlet.jsp.jar这个包,按照自定义标签步骤都做好,在tomcat5.5下跑了起来,没问题,问题是换到tomcat6.0.33的版本居然报错了.死活查不了是什么原因.错误如下.     2011-12-13 10:16:31 org.apache.catalina.core.StandardWrapperValve invoke严重: Servlet.service() for servlet jsp threw exceptio

Struts2自定义标签2自定义一个按班级id查询出该班级下的学生,存放进值栈,并遍历出来。

Struts2自定义标签的流程概念: (1)需要两个类:标签类(继承相应的tag类),基本类(继承Component).标签类专门负责从客户端取得用户输入的一些属性,这个普通的jsp自定义标签一样,取出来以后,需要把取出的属性值赋给基本类.从而可以看到基本类里面的属性也跟tag里面差不多. (2)tag类里面,需要定义你客户端传来的属性.私有化.并相应的set get.  必须的两个方法是public Component getBean(ValueStack stack,HttpServletR

Struts2自定义标签4自定义分页标签

第一步:webroot/web-inf下的str.tld文件 1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN" "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd

JSP的自定义标签教程

标签是一种XML元素,通过标签可以使JSP网页变得简洁并且易于维护,还可以方便地实现同一个JSP文件支持多种语言版本. 一.基本概念: 1.标签(Tag): 标签是一种XML元素,通过标签可以使JSP网页变得简洁并且易于维护,还可以方便地实现同一个JSP文件支持多种语言版本.由于标签是XML元素,所以它的名称和属性都是大小写敏感的 2.标签库(Tag library): 由一系列功能相似.逻辑上互相联系的标签构成的集合称为标签库. 3.标签库描述文件(Tag Library Descriptor

jsf 自定义标签:开发JSF自定义标签id,var属性的设置技巧

在JSF里开发自定义标签时,ID属性值的设置跟一般的属性不一样:if(this.id!=null){component.setValueExpression("id", this.id);}  如果这样设置运行时会报java.lang.IllegalArgumentException异常,这是因为在UIComponent类的setValueExpression方里会 检测Expression的名字是"id"或"parent"时就会抛出java.l

JSP自定义标签由浅到深详细讲解(一)

一.基本概念: 1.标签(Tag): 标签是一种XML元素,通过标签可以使JSP网页变得简洁并且易于维护,还可以方便地实现同一个JSP文件支持多种语言版本.由于标签是XML元素,所以它的名称和属性都是大小写敏感的 2.标签库(Tag library): 由一系列功能相似.逻辑上互相联系的标签构成的集合称为标签库. 3.标签库描述文件(Tag Library Descriptor): 标签库描述文件是一个XML文件,这个文件提供了标签库中类和JSP中对标签引用的映射关系.它是一个配置文件,和web

使用自定义标签实现JSP页面和代码的分离

js|页面 Test.jsp<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html>  <head>    <title>My JSP 'Test.jsp' starting page</title>  </head>   <body>    This is my JSP page. <br>    Date

JSP页面中的自定义标签

js|页面 JSP页面中的自定义标签 JSP页面中的自定义标签 Stephanie Bodoff 用于调用Javaean组件中的操作和执行请求分派的标准JSP标签简化了JSP页面的开发和维护.JSP技术还提供了在自定义标签中封装其他动态功能的机制,这种自定标签是JSP语言的扩展.自定义标签通常是以标签库的形式出现的,它定义了一组相关的自定义标签,并包含实现这些标签的对象. 可以由自定义标签执行的任务包括对隐式对象的操作.处理表单.访问数据库和其他企业级服务,如电子邮件和目录.以及执行流程控制.J

JSP页面中的自定义标签2

js|页面 JSP页面中的自定义标签2 带属性的标签 在标签handler中定义属性对于每一个标签属性,都必须在标签handler中定义一个属性以及符合JavaBean结构规范的get和set方法.例如,logic:present标签的标签handler <logic:present parameter="Clear"> 包含下列声明和方法: protected String parameter = null;public String getParameter() { r