ImageVerifierCode 换一换
格式:DOCX , 页数:21 ,大小:71.67KB ,
资源ID:13072543      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-13072543.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(JSP自定义标签.docx)为本站会员(b****6)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

JSP自定义标签.docx

1、JSP自定义标签JSP自定义标签(Custom Tag)V1.0JSP自定义标签简介基本概念JSP的自定义标签是用户自定义的JSP元素。自定义标签与JavaBean类似,都封装了Java的代码。当JSP转换为Servlet并执行时,WEB容器便会调用这些操作。自定义标签的功能1、 取代了JSP页面的JAVA代码。2、 自定义标签是可重用的组件。3、 可通过从调用页面所传递的属性参数进行定制。编写和调用JSP自定义标签的基本流程一个自定义标签的编写和调用包括三个流程:1、 编写后台JAVA处理程序。2、 编写标签库描述文件(Tag Library Descriptor)。3、 在XML文件中进行

2、自定义标签配置。4、 在JSP页面引用标签。JSP自定义标签解析过程在JSP中使用标签库中的标签,都需要按照以下的方式引入标签库:当在JSP中使用了标签库中的标签,JSP页面加载时,WEB容器根据所使用标签名称前缀获取JSP页面声明taglib中的uri属性值。然后根据所获取的uri的值在web.xml文件中查找相对应的元素,对获取对应的标签库描述文件(WEB-INF文件夹下的.tld文件)。根据JSP页面使用的标签的后缀从tld文件中获取相对应的属性,调用JAVA文件,创建TAG的Handler实例。最后WEB容器调用这个实例doStartTag/doEndTag方法完成标签的处理。JSP自

3、定义标签创建和使用自定义标签功能的实现要求在后台必须有一个相关的JAVA类的支持,但并不是任意编写一个JAVA类就能处理JSP标签,这个类也必须实现指定的规范才能用于支持JSP标签,这些规范表现形式也是接口和类,主要接口/类的描述如下:javax.servlet.jsp.tagext.Tag接口,所有处理JSP标签的类必须实现该接口。该接口中声明了6个方法,如果直接从该接口生成类则必须实现所有的6个方法,通常不会直接通过该接口生成标签的处理类。javax.servlet.jsp.tagext.TagSupport类,该类实现了Tag接口,用于创建不带标记体的自结束标签,这些标签中可以带属性。j

4、avax.servlet.jsp.tagext.BodyTagSupport类,该类继承了TagSupport,用于创建带标记体的标签。通常我们自定义的标签,编写处理程序时使用TagSupport和BodyTagSupport即可,不需要涉及到标签体的,继承TagSupport,需要用标签体的,用BodyTagSuppor。以下是开发和使用一个JSP自定义标签的全过程:1、 开发标记处理类,该类要继承TagSupport或BodyTagSupport。2、 创建标记库描述符文件*.tld,在该文件中为标记处理类指定标签名、声明标签属性。3、 在XML文件中配置自定义标签。4、 在JSP中引用标

5、签库。5、 在JSP中使用标JSP 标签。标签库描述文件(Tag Library Descriptor)标签库描述文件是一个XML文件,这个文件提供了标签库中类和JSP中对标签引用的映射关系。它是一个配置文件,和web.xml是类似的。*.tld文件必须放在WEB-INF文件下。TLD文件中各元素含义:代表开始一个标记库的描述 :代表标记库的版本 :代表标记所支持的JSP 的版本 :为标记库起别名,相当于注释,无实际用途 :代表开始描述一个标记,其下子元素如下: :为标记处理类起的标记名 :指定标记处理类的全名(即带包的名字) :标记体的类型,该示例中不需要标记体,所有设置为EMPTY,该值的

6、其他取值在后续内容中讲解 :用于为标签声明属性,其子元素如下: :用于指定属性名称 :用于声明该属性是否为必需的,本例中声明color、loop 两个属性都不是必需的。TLD文件编写示例 1.0 2.0 CustomTags 自定义标签 PageGrid com.taglib.pagegrid.PageGrid JSP 分页Grid id true true 唯一标志 width false true 宽度 height false true 高度 sql true true 查询SQL columnConfig true true 列名配置(ID,序号,20,false#NAME,姓名,15

7、0,true,列配置字符串格式(数据库列名,表列明,显示宽度,是否显示) TagSupport类本文档主要是通过继承TagSupport类来创建不带标记体的自定义标签。TagSupport类的主要属性1、 parent:表示嵌套了当前标签的上层标签处理类。2、 pageContext:表示WEB应用中的pageContext对象。该成员的功能与JSP的内置对象pageContex完全相同。通过该对象可以得到其他的JSP对象的引用。如:JspWriter out=pageContext.getOut();这一语句可以得到JSP内置对象out的引用,通过out我们就可以向客户端浏览器中输出内容了。

8、要使用其他几个JSP 对象原理与此相同。使用TagSupport注意点1、 JSP容器在调用doStartTag和doEndTag方法之前,会先调用setPageContext()和setParent()方法,设置pageContext和parent属性。因此在标签处理类中可以直接访问pageContext变量。2、 在TagSupport的构造方法中不能访问pageContext成员变量,因为此时JSP容器还没有调用setPageContext()方法对pageContext进行初始化。TagSupport处理JSP自定义标签的方法TagSupport类提供了两个处理处理自定义标签的方法:p

9、ublic int doStartTag() throws JspExceptionpublic int doEndTag() throws JspExceptiondoStartTag在JSP容器遇到自定义标签的起始标志,就会调用doStartTag()方法。doStartTag()方法返回一个整数值,用来决定程序的后续流程:1、 EVAL_BODY_INCLUDE:包含标记体,本例中要编写自结束标记所以不使用该值。2、 SKIP_BODY跳过标记体,即不处理标记体,开发自结束标记应该使用该值。doEndTag在JSP容器遇到自定义标签的结束标志,就会调用doEndTag()方法。doEnd

10、Tag()方法也返回一个整数值,用来决定程序的后续流程:1、 SKIP_PAGE:返回这个值,则终止页面执行。2、 EVAL_PAGE:返回该值则处理完当前标记后,JSP页面中止运行。实例在以下的实例中,主要是使用两种方式实现自定义标签:1、 使用上面所提到的,继承TagSupport类;2、 通过使用编写*.tag文件实现(JavaScript)。个人认为第二种方式优于第一种方式,更为实用。TagSupport方式实现本例中利用自定义标签达到分页组件的效果。1、 编写后台JAVA处理类package com.taglib.pagegrid;import javax.servlet.jsp.J

11、spTagException;import javax.servlet.jsp.tagext.TagSupport;public class PageGrid extends TagSupport private static final long serialVersionUID = 1L; private String sql = ; private String columnConfig = ; private String id = ; /* * 无参构造 */ public PageGrid() public String getSql() return sql; public St

12、ring getColumnConfig() return columnConfig; public String getId() return id; public void setSql(String sql) this.sql = sql; public void setColumnConfig(String columnConfig) this.columnConfig = columnConfig; public void setId(String id) this.id = id; public int doStartTag() throws JspTagException ret

13、urn EVAL_BODY_INCLUDE; public int doEndTag() throws JspTagException try /pageContext.getOut().write(getHTMLInnerText(); pageContext.getOut().print(getHTMLInnerText(); catch (Exception e) throw new JspTagException(TAG EXCEPTION!); return EVAL_PAGE; / 输出HTML格式 public String getHTMLInnerText() StringBu

14、ffer sBuffer = new StringBuffer(); sBuffer.append(); sBuffer.append(); sBuffer.append(); sBuffer.append(); sBuffer.append(); sBuffer.append(); sBuffer.append(); sBuffer.append(); sBuffer.append(); sBuffer.append(); sBuffer.append(共100页); sBuffer.append(); sBuffer.append(); sBuffer.append(); return s

15、Buffer.toString(); 2、 编写.tld文件(该文件必须放在WEB-INF目录下) 1.0 2.0 CustomTags 自定义标签 PageGrid com.taglib.pagegrid.PageGrid JSP 分页Grid id true true 唯一标志 width false true 宽度 height false true 高度 sql true true 查询SQL 3、 在web.xml文件中添加该标签库 /customTag /WEB-INF/CustomTag.tld 4、 在页面上引入该标签库5、 在页面中使用该标签启动服务,在浏览器中输入http:

16、/localhost:8080/rpc/tagTest.jsp,可以看到如下的显示结果:以上的是使用TagSupport完成的简单的示例,在实际中,只需要在其中添加需要的属性,和相关的逻辑处理,便可以达到分页的效果。下面这种结合JQuery实现的分页表格,可以完成无刷新分页,在实际中较上一种更为实用。TAG文件+JQuery实现这种方式的基本思路是在JavaScript文件中完成翻页的逻辑处理,将参数传递到服务端完成数据的获取,并将数据转换为HTML文本返回。1、 新建一个WEB项目,并在WebRoot目录下创建一个scripts文件夹,在该文件夹下创建名为CustomPage的JS文件和引入

17、所需的jQuery文件。在CustomPage.js中添加如下代码:/数据分页CustomPage = function(p_container) var me = this; me.id = ; me.width = ; me.height = ; me.style = ; me.className = ; me.allCount = 0; me.currentPageIndex = 1; me.allPageCount = 0; me.pageNumber = 0; me.actionPath = ; me.init = function() / 计算总页数 if(me.allCount

18、% me.pageNumber) = 0) me.allPageCount = me.allCount / me.pageNumber; else me.allPageCount = parseInt(me.allCount / me.pageNumber) + 1; p_container.innerHTML = + + 共 + me.allCount + 条  当前第 + me.currentPageIndex + 页(共 + me.allPageCount + 页)  每页 + me.pageNumber + 条 +  + &n

19、bsp;+  + + ; me.getData(); addEvent(); / 数据获取 me.getData = function () $.post( me.actionPath, currentPage : (me.currentPageIndex -1 ), allCount : me.allCount, pageNumber : me.pageNumber , function (result) $(#grid + me.id + ).html(result); ); / 翻页控制 function addEvent () / 首页 $(#first + me.id +

20、).click( function() if(1 = me.currentPageIndex) return false; else me.currentPageIndex = 1; $(#current + me.id + ).html(me.currentPageIndex); me.getData(); ); / 上一页 $(#p + me.id + ).click( function() if(1 = me.currentPageIndex) return false; else me.currentPageIndex = me.currentPageIndex - 1; $(#current + me.id + ).html(me.currentPageIndex); me.getData(); ); / 下一页 $(#n + me.id + ).click( function() if(me.allPageCount = me.currentPageIndex) return false; else me.currentPageIndex = me.currentPageIndex + 1; $(#current + me.id + ).html(me.currentPageIndex); me.getData();

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2