`
zhuhuide2004
  • 浏览: 143989 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

自定义标签(TagSupport )

    博客分类:
  • Html
阅读更多

定义最简单的标签   
自定义标签采用Default Adapter模式(缺省适配模式) 

Java代码

 //最简单的标签     
 public class LangHuaTag extends TagSupport {     
     private long startTime;     
     private long endTime;     
          
     public int doStartTag() throws JspException {     
         startTime = System.currentTimeMillis();     
         //表示定制标记里面有所包括的JSP页面     
         return TagSupport.EVAL_BODY_INCLUDE;     
     }     
     public int doEndTag() throws JspException {     
         endTime = System.currentTimeMillis();     
         long elapsed = endTime - startTime;          
         try {     
             JspWriter out = pageContext.getOut();     
             out.println("runtime is "+ elapsed);     
         } catch (IOException e) {     
             e.printStackTrace();     
         }     
         //表示JSP页面继续运行     
         return TagSupport.EVAL_PAGE;     
     }     
          
 }     
 //代属性的标签     
 public class DateTag extends TagSupport {     
     private String pattern = "yyyy-MM-dd hh:mm:ss";     
     private Date date;     
     //必须要有Set方法,因为是属性可以设值     
     public void setPattern(String pattern) {     
         this.pattern = pattern;     
     }     
          
     public void setDate(Date date) {     
         this.date = date;     
     }     
     
     public int doEndTag() throws JspException {     
         SimpleDateFormat sdf = new SimpleDateFormat(pattern);     
         //如果没有就是当前时间     
         if(date==null){     
             date = new Date();     
         }            
         JspWriter out = pageContext.getOut();     
         try {     
             out.print(sdf.format(date));     
         } catch (IOException e) {     
             e.printStackTrace();     
         }     
         return TagSupport.EVAL_PAGE;     
     }     
 }     
     
 /**   
  * 循环输出   
  * @author Administrator   
  *   
  */    
 public class LoopTag extends TagSupport {     
     private int times =0;     
     //Set方法设值     
     public void setTimes(int times) {     
         this.times = times;     
     }     
          
     public int doStartTag() throws JspException {     
         //表示定制标记里面有所包括的JSP页面     
         return TagSupport.EVAL_BODY_INCLUDE;     
     }     
          
     public int doAfterBody() throws JspException {     
         if(times>0){     
             times--;     
             //表示双从标签开始输入     
             return TagSupport.EVAL_BODY_AGAIN;     
         }        
         //表示结束,忽略标签内部的内容     
         return TagSupport.SKIP_BODY;     
     }     
          
 }    

配置文件   
Xml代码

 <?xml version="1.0" encoding="UTF-8" ?>    
 <taglib xmlns="http://java.sun.com/xml/ns/j2ee"    
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    
     xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"    
     version="2.0">    
     <tlib-version>1.0</tlib-version>    
     <short-name>util</short-name>    
     <uri>http://langhua.com/taglib/util</uri>    
     <tag>    
         <name>timer</name>    
         <tag-class>com.langhua.tagsupport.LangHuaTag</tag-class>    
         <body-content>JSP</body-content>    
         <!-- JSP,empty表示能能包函内容的,scriptless,tagdependent -->    
     </tag>    
          
     <tag>    
         <name>date</name>    
         <tag-class>com.langhua.tagsupport.DateTag</tag-class>    
         <body-content>empty</body-content>           
         <!-- JSP,empty表示不能包函内容的,scriptless,tagdependent -->    
         <attribute>    
             <!-- 标签名 -->    
             <name>time</name>    
             <!-- 是否为可选属性 -->    
             <required>false</required>    
             <!-- 是否接受JSP表达示计算结果 -->    
             <rtexprvalue>true</rtexprvalue>    
         </attribute>    
         <attribute>    
             <name>pattern</name>    
             <required>true</required>    
             <rtexprvalue>false</rtexprvalue>    
         </attribute>    
     </tag>    
          
     <tag>    
         <name>loop</name>    
         <tag-class>com.langhua.tagsupport.LoopTag</tag-class>    
         <body-content>JSP</body-content>             
         <!-- JSP,empty表示不能包函内容的,scriptless,tagdependent -->    
         <attribute>    
             <!-- 标签名 -->    
             <name>times</name>    
             <!-- 是否为可选属性 -->    
             <required>true</required>    
             <!-- 是否接受JSP表达示计算结果 -->    
             <rtexprvalue>true</rtexprvalue>    
         </attribute>           
     </tag>    
 </taglib>    

 

JSP页面   
Html代码  

 <%@ taglib prefix="util" uri="http://langhua.com/taglib/util"%>    
     
 <util:timer></util:timer>    
 <util:loop times="3">    
     <util:date pattern="yyyy-MM-dd" /><br/>    
 </util:loop>    
   
 <%@ taglib prefix="util" uri="http://langhua.com/taglib/util"%>  
   
 <util:timer></util:timer>  
 <util:loop times="3">  
     <util:date pattern="yyyy-MM-dd" /><br/>  
 </util:loop>

 

TagSupport的流程图

          SKIP_BODY 表示不用处理标签体,直接调用doEndTag()方法。
      
        SKIP_PAGE 忽略标签后面的JSP内容。
      
      EVAL_PAGE 处理标签后,继续处理JSP后面的内容。
      
      EVAL_BODY_BUFFERED 表示需要处理标签体。
      
      EVAL_BODY_INCLUDE 表示需要处理标签体,但绕过setBodyContent()和doInitBody()方法
      
      EVAL_BODY_AGAIN 对标签体循环处理。

      分享到:
      评论
      3 楼 kmlihy 2014-12-26  
      报错是因为在web.xml文件中没有注册tld文件,具体代码如下:
      <jsp-config>
        <taglib>
        <taglib-uri>http://www.lihy.com/sharp-taglib</taglib-uri>
        <taglib-location>/WEB-INF/sharp.tld</taglib-location>
        </taglib>
        </jsp-config>

      相应红色部分换成你自己的就可以了
      2 楼 di1984HIT 2014-04-09  
      写的不错。
      1 楼 赤道螞蟻 2010-03-05  
      你測試過嗎? 爲什麽會報:org.apache.jasper.JasperException: The absolute uri: http://langhua.com/taglib/util cannot be resolved in either web.xml or the jar files deployed with this application

      相关推荐

        struts2 自定义标签

        在Struts2中,自定义标签是提高代码可读性和可维护性的重要工具。本文将深入探讨Struts2自定义标签的实现机制、优点以及如何在实际项目中进行应用。 一、Struts2自定义标签的概念 自定义标签是JSP的一种扩展,允许...

        jsp 自定义标签实例

        首先,自定义标签的实现主要依赖于两个核心概念:Tag接口和TagSupport类。`Tag`接口定义了自定义标签必须实现的方法,如`doStartTag()`和`doEndTag()`,它们分别在标签开始和结束时被调用。`TagSupport`类是`Tag`...

        struts实现自定义标签

        在 Struts 中,自定义标签是提供一种灵活的方式,使得视图层(通常为 JSP 页面)能够更好地与业务逻辑交互,从而提高代码的可读性和可维护性。本文将深入探讨如何在 Struts 中实现自定义标签。 一、自定义标签概述 ...

        JSP自定义分页标签 extends TagSupport

        JSP自定义分页标签 extends TagSupport 多种分页风格无需额外资源,使用简单易懂:WebRoot/WEB-INF/tms-tags.tld 文件路径

        JSP自定义标签学习笔记

        创建自定义标签需要编写处理类,继承自`javax.servlet.jsp.tagext.TagSupport`或`javax.servlet.jsp.tagext.SimpleTagSupport`,然后在TLD文件中定义标签属性、行为等信息。 三、自结束标签(不带标签体,TagSupport...

        自定义标签,标签实例,ppt

        在Java Web开发中,自定义标签(Custom Tags)是一个强大的工具,它允许开发者创建可重用的组件,提高代码的可读性和维护性。自定义标签是JSP标准标签库(JSTL)的一种扩展,它能将复杂的业务逻辑封装起来,使JSP...

        一个用于分页的自定义标签

        一个“自定义标签”是开发者为了扩展JSP(JavaServer Pages)功能而创建的,它允许我们封装复杂逻辑并将其作为可重用的组件。本项目提供了一个用于分页的自定义标签,适用于那些需要在网页上进行数据分页展示的应用...

        JSP自定义标签:最近在项目中要用到这种技术,所以自己就写一个经典的HelloWorld实例

        JSP自定义标签是JavaServer Pages (JSP) 技术中的一种高级特性,它允许开发者创建可重用的自定义组件,以提高代码的可维护性和可读性。自定义标签可以看作是对HTML标签的扩展,它们提供了更加结构化和面向对象的方式...

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

        - **标签处理类**:实现了自定义标签功能的Java类,通常继承`TagSupport`或实现`SimpleTag`接口。 2. 自定义JSP标签的格式: - **引入标签库**:使用`@taglib`指令,指定前缀和URI,前缀用于识别标签库,URI指向...

        JSP自定义标签实例与详细讲解

        在JavaServer Pages (JSP) 技术中,自定义标签是实现页面逻辑和视图分离的一种重要方式,它允许开发者创建可重用的组件,提高代码的可维护性和复用性。本教程将深入探讨JSP自定义标签的实例与详细讲解。 一、JSP...

        jsp自定义标签库实现数据列表显示

        首先,`UserListTag.java` 是自定义标签的核心类,它继承了`javax.servlet.jsp.tagext.TagSupport` 或 `javax.servlet.jsp.tagext.SimpleTagSupport` 类,实现了自定义标签的功能。在这个类中,你需要定义处理标签...

        JSP自定义标签之日期显示

        在Java服务器页面(JSP)开发中,自定义标签是一种扩展JSP功能的强大方式,它允许我们封装复杂的逻辑或重复使用的代码片段,提高代码的可读性和可维护性。本篇将深入探讨“JSP自定义标签之日期显示”,以及如何通过...

        Struts2自定义标签

        自定义标签是Struts2框架中的一个重要特性,它允许开发者创建自己的标签库,以更直观、易读的方式在JSP页面中处理业务逻辑。下面将详细介绍Struts2自定义标签的相关知识点。 首先,理解自定义标签的作用。在传统的...

        自定义标签

        自定义标签通常被用来封装复杂的业务逻辑,减少JSP页面中的Java代码,使得视图层更加清晰。在本篇文章中,我们将深入探讨自定义标签的原理、实现方式以及其在实际项目中的应用。 1. **自定义标签的概念** 自定义...

        tag struts2的自定义标签实例

        1. 定义标签接口:在Struts2中,我们通常使用`com.opensymphony.xwork2.util.base.TagSupport`作为自定义标签的基础类,它继承了JSP的`javax.servlet.jsp.tagext.TagSupport`,提供了访问上下文对象、标签属性等方法...

        java中自定义标签的使用方法

        在Java编程语言中,自定义标签(也称为自定义JSP标签)是扩展JSP页面功能的一种强大方式。它们允许开发者创建可重用的代码片段,以提高代码的可读性和可维护性。本篇文章将深入讲解Java中自定义标签的使用方法,包括...

        利用TagSupport创建自定义标签实现网页左侧菜单

        本文将详细讲解如何利用TagSupport创建自定义标签来实现网页左侧菜单的功能。 1. **理解TagSupport**: TagSupport是javax.servlet.jsp.tagext包下的一个抽象类,它是所有自定义标签的基础。通过继承这个类,我们...

        创建JSP自定义标签.doc

        一个自定义标签其实是一个Java类,这个类需要继承自`TagSupport`或`BodyTagSupport`。这两个类由JSP容器提供,它们包含处理JSP页面与自定义标签之间交互所需的方法。选择继承哪个基类取决于标签是否需要处理内部内容...

        JSTL自定义标签实例解析

        **JSTL自定义标签实例解析** JavaServer Pages Standard Tag Library (JSTL) 是一套标准的标签库,用于简化JSP开发。JSTL允许开发者使用预定义的标签来处理常见任务,如迭代、条件判断、XML处理等。本文将深入讲解...

      Global site tag (gtag.js) - Google Analytics