Chinaunix首页 | 论坛 | 博客
  • 博客访问: 43155
  • 博文数量: 10
  • 博客积分: 1400
  • 博客等级: 上尉
  • 技术积分: 140
  • 用 户 组: 普通用户
  • 注册时间: 2008-09-03 10:23
文章分类

全部博文(10)

文章存档

2011年(1)

2008年(9)

我的朋友
最近访客

分类: Java

2008-10-06 16:28:11

JSP自定义标签
在JSP页面中常常会用标签做一些处理,这样做的目的就是为了减少代码的维护工作。
 
JSP自定义标签的编写步骤:
(1)确定要实现的功能,确定标签处理程序所用的参数[一般从页面传递过来],还有结果数据。
(2)根据传递过来的参数,写标签处理程序。
(3)在web.xml程序部署文件中注册自定义标签。
(4)在web-inf.xml目录下定义TLD文件。
(5)在jsp页面中声明并引用标签.
 
JSP自定义标签的执行过程:
当加载JSP页面的时候,会根据声明的uri的值去web.xml查找与其值对应的taglib节点下的taglib-uri,[如果查不到抛出异常]然后取出taglib-location的值,再读取相应的TLD文件。如taglib-location的值为/WEB-INF/c.tld,会到web-inf下,读取c.tld文件。
接着,会根据JSP页面上的prefix的值去TLD文件中读取对应的tag节点。从而调用自定义标签处理程序。然后带回处理结果到JSP页面上。
 
现在重点说一下自定义标签编写步骤中方法与注意事项:
(1)确定要实现的功能,确定标签处理程序所用的参数[一般从页面传递过来],还有结果数据。
在这一步中,看似没什么,其实决定了你所写的标签的健壮性,重用性,可扩展性,因为往往一个自定义标签可能用到的地方比较多,又可能某些地方所在所要作的处理有相似之处。这样可以考虑标签的可扩展性了。
主要是确定功能,待处理数据,结果数据。
 
(2)根据传递过来的参数,写标签处理程序。
一个处理程序就是一个普通的java类,它惟一特别之处是它必须继承TagSupport或者BodyTagSupport类。这两个类提供了一些方法,负责jsp页面和你编写的类之间的交互,例如输入,输出。而这两个类是由jsp容器提供的,无须开发人员自己实现。换句话说,你只需把实现了业务逻辑的类继承TagSupport或者BodyTagSupport,再做一些特别的工作,你的类就是一个Tag。并且它自己负责和jsp 页面的交互,不用你多操心。
 
“特别的工作”通常有以下几个步骤:

[1]提供属性的set方法,此后这个属性就可以在jsp页面设置。以jstl标签为例,这个value就是jsp数据到tag之间的入口。所以tag里面必须有一个setValue方法,具体的属性可以不叫value。例如setValue(String data){this.data = data;}
这个“value”的名称是在tld里以attribute元素存在的。
取什么名字都可以,只需tag里提供相应的set方法即可。

[2]处理 doStartTag 或 doEndTag 。这两个方法是 TagSupport提供的。 还是以为例,当jsp解析这个标签的时候,在“<”处触发 doStartTag 事件,在“>”时触发 doEndTag 事件。通常在 doStartTag 里进行初始化,流程选择操作,在 doEndTag 里后续页面输出控制。
[3]编写tld文件,就是把编写的tag组件的信息以mxl形式告诉容器,它才好以一定步骤解释tag组件
[4]在jsp页面导入tld。这样,你的jsp页面就可以使用自己的tag组件了。
 
(3)在web.xml程序部署文件中注册自定义标签。
这一步主要的作用就是让工程知道有这么一个标签。就是让自定义标签与工程关联起来。
一般的代码如下:

   
     〈!-- 这里的taglib-uri必须与JSP页面上的RUI值是一致的 --〉
     /jstl/core
      〈!-- 这里的taglib-location告诉在web-inf目录下有一个c.tld文件 --〉
     /WEB-INF/c.tld
   
 
(4)在web-inf.xml目录下定义TLD文件。
这一步所定义的tld文件名与web.xml中注册taglib-location值一致[c.tld]。
标签库元素属性:表格如下
        
属性表格
属性 描述
tlib-version 本标签库实现版本
jsp-version 标签库依赖的JSP版本
short-name 被JSP创作工具使用的一个短的默认名词
uri 指定这个标签库的uri信息
display-name 被工具使用的显示用的名字
small-icon 被工具使用的小图标
large-icon 被工具使用的大图标
description 本标签的描述
validator TLD验证信息
listener 实践监听器规范
        tag标签相关属性:
tag标签相关属性表
属性 描述
name tag标签唯一的名称
tag-class tag标签的处理类
tei-class tag标签的TagExtraInfo类
body-content 标签主体的内容
display-name 显示的名称
small-icon 被工具使用的小图标
large-icon 被工具使用的大图标
description 本标签的描述
variable 脚本变量的信息
attribute 标签属性的信息
(5)在jsp页面中声明并引用标签.
这一步只有引用声明。形如:<%@ taglib uri="/jstl/core" prefix="c" %>
 
阅读(1459) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~