`
zhuhuide2004
  • 浏览: 142922 次
  • 性别: 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

      相关推荐

        JSP自定义标签学习笔记

        本人自行研究JSP自定义标签的学习笔记 目录如下: 目录 一、概述 1 1.1 使用简单标签机制 2 1.2 使用标签文件 3 二 、自定义标签简介 3 2.1 自定义标签概念 3 2.2 标签相关概念 3 2.3 如何创建自定义标签 3 三、自...

        JSP自定义分页标签 extends TagSupport

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

        struts2自定义标签案例详解

        Struts2中实现自定义标签很简单,主要分为3步: 1.创建taglib文件(.tld),编写标签声明。 2.编写自定义标签类。 3.在页面中使用标签。 下面以一个自定义的分页标签为例,进行说明。 其实,开发自定义标签并不...

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

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

        简单易用的自定义标签分页显示

        import javax.servlet.jsp.tagext.TagSupport; public class PageTag extends TagSupport { private String name="page"; private String action; private int measurement; public void setName(String ...

        自定义标签代替Struts标签实现分页

        自定义标签实现分页,分页信息都封装在一个继承自TagSupport的java文件中,自定义一个tld文件,jsp页面通过taglib指令引入tld文件,使用自定义标签。

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

        由浅到深详细讲解JSP自定义标签 一、基本概念 1、标签(Tag) 标签是一种XML元素,通过标签可以使JSP网页变得简洁并且易于维护,还可以方便地实现同一个JSP文件支持多种语言版本。由于标签是XML元素,所以它的名称和...

        jsp java自定义标签 分页 当前位置 循环遍历数据

        jsp和java联合实现了自定义标签的功能,主要技术继承了TagSupport类和编写对应bodytag.tld配置文件 实现了分页功能 当前功能点所在位置 循环遍历数据

        Jsp自定义标签和方法详解

        Jsp自定义标签和方法详解 首先是要有一个标签处理类,标签处理类可以直接实现Tag接口,也可以继承Java中已经实现了的TagSupport这个类,TagSupport也是继承自Tag接口的,它内部已经对Tag接口进行了实现,一般是继承...

        Struts2 自定义下拉框标签Tag(源码)

        自定义标签主要包括三个步骤: 1、编写java类,继承TagSupport类; 2、创建tld文件,影射标签名和标签的java类; 3、jsp页面引入tld。 博文地址:http://blog.csdn.net/itmyhome1990/article/details/50718282

        Java web自定义标签操作数据库.docx

        java web技术搭建继承实现tagsupport类,实现jsp页面与servlet服务器端的数据交互,达到数据库页页面的分页的操作。

        java自定义分页标签

        // 是TagSupport类中定义的一个属性,它是javax.servlet.jsp.PageContext的对象 request = (HttpServletRequest) pageContext.getRequest(); JspWriter out = pageContext.getOut(); StringBuffer sbOut ...

        jsp中自定义Taglib详解

        自定义标签类都必须继承一个父类:javax.servlet.jsp.tagext.SimpleTagSupport,或者TagSupport除此之外,JSP自定义标签类还有如下要求。 如果标签类包含属性,每个属性都有对应的getter和setter方法。 重写doTag()...

      Global site tag (gtag.js) - Google Analytics