`
714501466
  • 浏览: 64403 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
社区版块
存档分类
最新评论

jstl 自定义标签

    博客分类:
  • jstl
 
阅读更多

开发自定义标记需要有两个组件:
1、一个是描述标记特征的标记库描述文件(TLD文件)
2、另一个是Java类,也称为标记处理器,为了完成标记的行为,JSP容器要执行标记处理器。
自定义标签实现过程:
 1、写标签处理器类:TestTag.java。
 2、写tld文档:用来指定标签的名字,标签库等。
 3、用JSP来测试(指定标签库的位置tld,指定前缀名,使用标签)。

首先编写标签处理器类,标签处理器类需要继承javax.servlet.jsp.tagext.TagSupport或者javax.servlet.jsp.tagext.BodyTagSupport,二者区别暂时不知道,如果有高手知道,请给与指导,谢谢先。一般实现doStartTag和doEndTag方法,例如:

public class ExampleTag extends TagSupport{
                 public int doStartTag(){
                    //当处理开始标记的时候调用该方法
                }
               public int doEndTag(){
                       //当处理结束标记的时候调用该方法
               }
}

doStartTag方法和doEndTag方法的返回值说明:

SKIP_BODY:跳过自定义标签间的代码, 跳过了开始和结束标签之间的代码,一般是在doStartTag中使用;
       SKIP_PAGE:跳过在此之后的所有页面内容,忽略剩下的页面,一般是在doEndTag中使用;
       EVAL_BODY_INCLUDE:执行自定义标签间内容,处理嵌套的标签,一般是在doStartTag中使用,由负责处理标签正文的tag接口提供 ;

EVAL_BODY_BUFFERED :对包含的内容进行解析 一般是在doStartTag中使用,由负责处理标签正文的bodyTag接口提供,目的是通知jsp容器作好读取正文的工作(创建一个body-content包装正文和获取存放操作结果的out对象,便于以后的操作和输出). 
       EVAL_BODY_AGAIN:再次执行自定义标签间内容,处理标签正文,嵌套标签的iteratorTag接口的使用 ;
       EVAL_PAGE:执行标签后页面内容, 继续执行下面的页, 一般是在doEndTag中使用 ;

常用的返回值为:EVAL_BODY_INCLUDE。

常用的属性有pageContex。

例如:

package com.test;
       import java.io.IOException;
       import javax.servlet.jsp.tagext.BodyTagSupport;
       public class TestAttributeTag extends BodyTagSupport {

//自定义标签支持带参数
      private String name;
      public String getName() {
                return name;
      }
      public void setName(String name) {
                this.name = name;
      }
      public int doStartTag(){
                try {
                              pageContext.getOut().print("Hello "+name);
                } catch (IOException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                }
                return EVAL_BODY_INCLUDE;
     }
     public int doEndTag(){
                return  EVAL_BODY_INCLUDE;
      }
}

然后讨论一下TLD文档编写

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
                        "
http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
<taglib>
 <tlib-version>1.0</tlib-version>  //标签版本
 <jsp-version>1.2</jsp-version>  //标签依赖jsp的版本
 <short-name>zl</short-name>  //默认前缀名称
 <uri>http://www.test.com</uri>  //指定标签库德uri
 <tag>
  <name>testtag</name>         //标签名称
  <tag-class>com.test.TestAttributeTag</tag-class>    //标签处理器类
  <body-content>JSP</body-content>                      //标签主体内容,一般选择JSP
  <attribute>                                                           //标签的参数name
   <name>name</name>
   <required>true</required>                                //参数是否必须,true表示必须,false反之
   <rtexprvalue>true</rtexprvalue>                       //是否支持EL表达式
   <type>java.lang.String</type>                         //参数类型
   <description>用户名称</description>             //参数描述
  </attribute>
 </tag>
</taglib>

最后用jsp页面测试自定义标签,例如:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="zl" uri="
http://www.test.com" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">   
    <title>My JSP 'ZidingyiTag.jsp' starting page</title>   
 <meta http-equiv="pragma" content="no-cache">
 <meta http-equiv="cache-control" content="no-cache">
 <meta http-equiv="expires" content="0">   
 <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
 <meta http-equiv="description" content="This is my page">
 <!--
 <link rel="stylesheet" type="text/css" href="styles.css">
 -->
  </head> 
  <body>
    This is my JSP page. <br>   
 
   <zl:testtagname="test"></zl:testtag>  
  </body>
</html>

例子比较简单,有什么不对地方,欢迎大家批评!

 

转:http://beautifulsmallsnow.blog.163.com/blog/static/280985012010122111644689/

参考:http://www.iteye.com/topic/157737

 

分享到:
评论

相关推荐

    JSTL自定义标签实例解析

    自己做的一个小例子,实现JSTL自定义标签。功能:输入x和y,点击按钮后循环输出y次x。

    jstl自定义标签,自定义EL表达式

    这次整理自定义标签主要是项目的需要,要将一些写死的url信息配置于配置文件中,这样发版的时候改动起来相当方便

    JSTL 以及自定义标签开发相关

    JSTL 以及自定义标签开发相关 JSTL 核心标签库标签共有13个,功能上分为4类: 1.表达式控制标签:out、set、remove、catch 2.流程控制标签:if、choose、when、otherwise 3.循环标签:forEach、forTokens 4.URL...

    jstl自定义标签和函数思维导图

    jstl自定义标签和函数思维导图

    JSTL 自定义标签

    NULL 博文链接:https://zhouxianglh.iteye.com/blog/858182

    这个压缩包里有JSTL自定义标签开发实例的源码及相关文件

    这个压缩包里有我在学习JSTL自定义标签时写的一些自定义标签实例,如果你也在学JavaWeb技术,那么我相信这些源码会对你有帮助的

    JSTL 开发自定义标签使用的jar

    JSTL 开发自定义标签使用的jar jstl.jar standard.jar

    jsp自定义标签-比较强大的

    jsp、jstl自定义标签实现的分页,实现的还是比较好的,没有在request、session等范围保存过数据,在pageContext范围内保存过集合的数据, 实现的方法还是比较简单的,适用性还是比较广的,我是实在是没分了,平时也...

    jstl自定义标签

    NULL 博文链接:https://wushenbao.iteye.com/blog/810955

    EL、JSTL、自定义标签、过滤器的ppt

    EL、JSTL、自定义标签、过滤器的ppt

    JSTL JSP 自定义标签 分页

    jh-plugins是一项基于JSTL的自定义标签(插件)库,致力于打造一处实现、任何项目通用的开源项目。 jh-plugins已实现标签库:分页 jh-plugins特点:高效、轻巧、简单、适用(可融合与任何B/S架构的java项目) jh-...

    jstl标签所需要的包

    java中用到的jstl标签 ,大家都知道 jstl自定义标签的很多使用性 所以都喜欢用 但是有些找不到jar包的麻烦

    JSTL自定义EL表达式

    本资源代码中包含jstl的标签库定义以及自定义EL标签使用的详细说明,参见压缩文件中说明即可,欢迎各位技术员下载参考及使用

    JavaWeb-12:自定义标签库开发&JSTL标签库

    JavaWeb-12:自定义标签库开发&JSTL标签库

    JSTL标签库

    JSTL标签库的使用是为类弥补html表的不足,规范自定义标签的使用而诞生的。在告别modle1模式开发应用程序后,人们开始注重软件的分层设计,不希望在jsp页面中出现java逻辑代码,同时也由于自定义标签的开发难度较大...

    自定义标签库(自己写)

    自己写的自定义标签库,实现JSTL常用的功能。

    jstl标准标签库

    jstl 文档标准标签库JSTL – JSP Standard Tag Library,是JSP的标准标签库 自定义标签库 自定义函数

    JSTL标准标签库.pdf

    从JSP 1.1规范开始JSP就支持使用自定义标签,使用自定义标签大大降低了JSP页面的复杂度,同时增强了代码的重用性,因此自定义标签在WEB应用中被广泛使用。许多WEB应用厂商都开发出了自己的一套标签库提供给用户使用...

    jstl标签包,用于jsp自定义标签

    jstl标签包,用于jsp自定义标签,内包含jstl.jar standard.jar两个包

Global site tag (gtag.js) - Google Analytics