`
jiangduxi
  • 浏览: 453167 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

开发带Body的标签库

阅读更多
   关于带有Body标签的开发。另外,标签中可以从JSP中传入参数,下面给个案例瞅瞅!

带有Body的Tag必须实现javax.servlet.jsp.tagext.BodyTag接口,BodyTag接口中定义了一些处理标签体的方法。下面给出BodyTag的处理过程:
1. 当容器创建一个新的标签实例后,通过setPageContext设置标签的页面的上下文。
2. 使用setParent方法设置这个标签的上一级标签。如果没有上一级嵌套,设置为null。
3. 设置标签的属性,这个属性在标签库描述文件中定义。如果没有定义属性,就不调用此类方法
4. 调用doStartTag方法,这个方法可以返回EVAL_BODY_INCLUDE和SKIP_BODY。当返回EVAL_BODY_INCLUDE时,就计算标签的Body;如果返回SKIP_BODY,就不再计算标签的Body
5. 调用setBodyContent设置当前的BodyContext。
6. 调用doInitBody.如果在计算BodyContent时,需要进行一些初始化,就在这个方法中进行
7. 每次计算完BodyTag后调用doAfterBody。如果返回EVAL_BODY_TAG,表示继续计算一次BodyTag,直到返回SKIP_BODY才继续执行步骤8
8. 调用doEndTag方法,这个方法可以返回EVAL_PAGE或者SKIP_PAGE。当返回EVAL_PAGE时,容器将在标签结束时继续计算JSP页面的其他部分;如果返回SKIP_PAGE容器将在标签结束时停止计算JSP页面的其他部分。
9. 调用release()方法释放标签程序占用的任何资源。

代码显示
 package com.test.ch14;
 ...//imports

public class BodyTagExample extends BodyTagSupport
{
   int counts;// counts 为迭代的次数
   
    public BodyTagExample(){
     super();
    }
  /** 设置count属性,这个方法由容器自动调用*/
  public void setCount(int c){
     this.counts = c;
   }
  /** 覆盖doStartTag方法*/
  public int doStartTag()throws JspTagException{
  
    System.out.println("doStartTag");
    if(counts > 0){
       return EVAL_BODY_TAG;
     }else{
       retrun SKIP_BODY;
     }
    }
  /** 覆盖doAfterBody方法*/
  public int doAfterBody() throws JspTagException{
    System.out.println("doAfterBody"+counts);
    if(counts > 0){
       counts --;
       return EVAL_BODY_TAG;
     }else{
      return SKIP_BODY;
     }
   }
 /** 覆盖doEndTag方法*/
  public int doEndTag()throws JspTagException{

   System.out.println("doEndTag");
   try{
        if(bodyContent != null){
           bodyContent.writeOut(bodyContent.getEnclosingWriter());
         }
      }catch(java.io.IOException e){
        throw new JspTagException("IOError:" +e.getMessage());
      }
   return EVAL_PAGE;
  }
  
   public void doInitBody() throws JspTagException{
   System.out.println("doInitBody");
  }

  public void setBodyContent(BodyContent bodyContent){
    System.out.println("setBodyContent");
    this.bodyContent = bodyContent;
    }
  }

BodyTagExamplt的标签描述如下
  <tag>
    <name>loop</name>
    <tag-class>com.test.ch14.BodyTagExample</tag-class>
    <body-content>jsp</body-content>
    <attribute>
       <name>counts</name>
       <required>true</required>
       <rtexprvalue>true</rtexprvale>
    </attribute>
 </tag>

注意:1. Body-Content必须是jsp
2. counts为此标签的属性,它和BodyTagExample中定义的属性"int counts"必须一样。并且BodyTagExample中必须有setCounts(int counts)方法,否则这个属性就不能设置。
3.<required>表示这个属性是必需的。

测试页面代码
 <%@ taglib uri="demotag" prefix="bodytag"%>
 <html>
  <head>
   <title>Test body Tag</title>
   <meta http-equiv="Content-Type" context="text/html;charset=gb2312">
  </head>
  <body>
   <HR>
     <bodytag: loop counts="5">
           现在的时间是:<%= new java.util.Date()%><BR>
     </bodytag: loop>
   </HR>
  </body>
 </html>

OK,进行调试任何看输出。
分享到:
评论

相关推荐

    Java标签库—Taglib.pdf

    通过标签库,开发人员可以创建可重用的代码片段,提高开发效率,同时简化JSP页面的复杂度。标签库中的标签扩展是一种Java类,它实现了或者运行了JSP规范定义的接口,比普通的JavaBean具备更丰富的运行时协议。 ### ...

    Taglib自定义标签库

    #### 三、开发带属性的标签 扩展“helloTag”功能,使其支持属性设置,如字体大小和颜色。这需要在标签实现类中添加对属性的支持,并在TLD文件中定义相应的属性描述。 ```java public class helloTagHaveProp ...

    jsp自定义标签库问答集锦.

    ### jsp自定义标签库知识点详解 #### 一、什么是jsp自定义标签? 1. **概念**:JSP 自定义标签是一种将复杂的功能封装成一个简单的标签的方式,它允许开发者创建可重用的代码组件,这些组件可以在 JSP 页面中像...

    带属性不带标签体的标签实例

    在Java Web开发中,我们经常使用自定义标签(Tag Library)来提高代码的可读性和复用性。...这个实例是一个很好的起点,可以进一步研究如何添加更多的属性、处理复杂的逻辑,以及与其他标签库集成。

    JSP自定义标签开发使用

    - **标签库描述文件(TLD)**:TLD是XML文件,它定义了标签库的元数据,包括标签的名称、类、属性等。 2. **自定义标签的形式** - **简单格式**:无标签体,不嵌套其他标签,如`&lt;yourDate:displayDate/&gt;`。 - **...

    jsp自定义带标签体的标签

    完成上述步骤后,你可以在JSP页面中通过`&lt;%@ taglib uri="/WEB-INF/myTag.tld" prefix="myTag" %&gt;`导入标签库,并使用类似`&lt;myTag:bodyTag1 countNum="10"&gt;`的语法来使用自定义标签。 #### 三、示例代码解析 以下...

    JSP应用开发-自定义标签的使用.pptx

    **JSP自定义标签的使用**是JSP应用开发中的一种高级特性,它允许开发者创建自己的标签库,以更简洁、可复用的方式编写代码,提高程序的可读性和维护性。下面我们将深入探讨自定义标签的相关概念和创建步骤。 **1. ...

    ASP技术常遇问题解答-如何操作〈BODY〉标签?.zip

    这段代码将在`&lt;BODY&gt;`内生成一个带有动态消息的`&lt;h1&gt;`标签。 2. **CSS控制**:ASP允许我们在服务器端设置`&lt;BODY&gt;`标签的CSS属性,如背景颜色、字体大小等。例如: ```asp &lt;body style="() %&gt;"&gt; ``` 在这里,`...

    原创-制作一个带参数的自定义标签

    在Web开发中,自定义标签库是提升代码复用性和可维护性的重要手段,尤其是在JavaServer Pages (JSP)环境中。本文将基于一篇技术笔记——《自定义标签库制作(二)》,详细阐述如何创建并应用带有参数的自定义标签。 ...

    jstl标签库1

    JSTL(JavaServer Pages Standard Tag Library),自JSP 1.1规范引入以来,便成为Web开发者的重要工具,旨在减少自定义标签库的重复开发工作,提高开发效率与代码可读性。作为Apache Jakarta项目的一部分,JSTL持续...

    C标签简介及使用方法带例子

    C标签,全称为JavaServer Pages Standard Tag Library,是JSP中一种重要的标签库,它提供了丰富的功能,使得开发者能够更加方便地处理常见的JSP任务。本文将深入探讨C标签的使用方法,特别是 `&lt;c:out&gt;` 标签的用法。...

    带有参数的taglib(自定义标签)

    同时,开发人员还可以创建自己的自定义标签库,以满足特定项目需求。 ### 二、自定义标签的创建 创建自定义标签涉及以下几个步骤: 1. **定义标签处理类**:这个类将实现自定义标签的行为,继承自`javax.servlet....

    利用BodyTagSupport创建带标签体的自定义标签

    4. **部署和使用**:将TLD文件放置在Web应用的`WEB-INF`目录下的`taglib`目录中,然后在JSP页面中通过`&lt;%@ taglib %&gt;`指令引入标签库,并使用自定义标签。例如: ```jsp ... 这是标签体内容 ``` 通过上述...

    jsp标签简介.docx

    3. **带body的标签**:标签内部可以包含其他JSP内容(body),处理类可以访问和操作这部分内容。 4. **定义脚本变量的标签**:在标签执行过程中,可以创建并设置脚本变量供后续代码使用。 5. **具有协作关系的标签**...

    自定义标签小练习----一个简单的分页标签

    1. **标签库描述文件(TLD, Tag Library Descriptor)**:这是定义自定义标签的元数据文件,用于声明标签的名称、属性、作用域等信息。例如,在`mytags.tld`文件中,我们可以定义名为`paging`的标签,指定它的属性如...

    jsp 标签

    标签分为两种类型:标准标签库(JSTL)和自定义标签库(Custom Tags)。标准标签库如JSTL提供了许多预定义的标签,如控制流、I/O操作等,而自定义标签则允许开发者根据项目需求创建自己的功能组件。 二、创建JSP...

    jsp 定制标签(Custom Tag).docx

    在JavaServer Pages (JSP)...通过定义处理器类和TLD文件,我们可以创建自己的标签库,从而提高代码的可维护性和效率。在实际开发中,理解并熟练掌握自定义标签的创建和使用,对于提升JSP应用的开发质量和效率至关重要。

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

    1. **标签库描述符(TLD)**:在TLD文件中,开发者会声明这个分页标签,包括标签的名字、属性(如当前页数、总页数等)、以及指向标签处理类的引用。 ```xml &lt;name&gt;paging &lt;tag-class&gt;...

    Java自定义标签 教程

    Java自定义标签是JSP开发中的一个重要特性,它允许开发者扩展JSP页面的功能,通过创建自己的标签库来封装复杂逻辑或常见操作。本教程将详细讲解如何创建和使用自定义标签。 首先,JSP中的标签库是实现自定义功能的...

Global site tag (gtag.js) - Google Analytics