当前位置导航:炫浪网>>网络学院>>网页制作>>JSP教程

JSP:自定义标签——开发实例

    开发带属性的标签:helloTagHaveProp

    本实例中开发的标签在实例108的helloTag标签上作出改进,开发目标是在helloTag标签上增加两个属性fontSize和fontColor,fontSize用于设置字体大小,fontColor用于设置文字的颜色。

    (1)第一步:开发标签实现类。

  helloTagHaveProp.java
  package hello;
  import javax.servlet.jsp.JspWriter;
  import javax.servlet.jsp.tagext.TagSupport;
  public class helloTagHaveProp extends TagSupport {
    private String fontSize="3";//字体大小,默认3号
    private String fontColor="#000000";//字体颜色,默认黑色
    //----标签开始时调用此方法-------
    public int doStartTag(){
        try{
            JspWriter out=pageContext.getOut();
            out.print("标签开始了。<font color=\""+fontColor +
                 "\" size=\""+fontSize+"\">hello!</font>");
        }catch(Exception e){
            System.out.println(e);
        }
        return EVAL_BODY_INCLUDE;
    }
    //----标签结束时调用此方法-------
    public int doEndTag(){
        try{
            JspWriter out=pageContext.getOut();
            out.print("标签结束了。");
        }catch(Exception e){
            System.out.println(e);
        }
        return EVAL_PAGE;
    }  
    public String getFontColor() { 
        return fontColor;
    }
    public void setFontColor(String fontColor) {
        this.fontColor = fontColor;
    }
    public String getFontSize() {
        return fontSize;
    }
    public void setFontSize(String fontSize) {
        this.fontSize = fontSize;
      }
  }

    (2)第二步:编写标签描述tld文件。这里在myTag.tld文件中增加内容,在<taglib>与</taglib>之间增加的内容如下:

  <!-- helloTagHaveProp-->
  <tag>
     <!-- 标签名称-->
     <name>helloTagHaveProp</name>
     <!-- 标签对应的处理类-->
     <tag-class>hello.helloTagHaveProp</tag-class>
     <!-- 标签体内容,没有标签体则设为empty-->
     <body-content>empty</body-content>
     <!-- 标签的属性声明-->
     <attribute>
      <name>fontSize</name>
      <required>false</required>
     </attribute>
     <attribute>
      <name>fontColor</name>
      <required>false</required>
     </attribute>
  </tag>

    其中,name为属性的名称,required设置此属性是否必须设置,如果为true则在JSP页面中使用此标签时,必须给标签的这个属性赋值。

    (3)第三步:在Web应用的web.xml文件中声明标签库引用。本例与实例108使用同一个tld文件,故不必再修改。

    (4)第四步:在JSP页面中声明并调用标签。

  useHelloTagHaveProp.jsp
  <%@ taglib uri="/myTag" prefix="myTag" %>
  <%@ page contentType="text/html;charset=GB2312" %>
  <html>
    <head>
    <title>一个简单的自定义标签</title>
    </head>
    <body>
   下面是应用这个简单的自定义标签的结果:<br>
  <myTag:helloTagHaveProp fontSize="5"/><br>
  <myTag:helloTagHaveProp fontSize="4" fontColor="red"/>
    </body>
  </html>

    程序的运行结果如图13-3所示。

    三、 开发带标签体的标签

    要开发带标签体的标签,可实现BodyTag接口,也可从BodyTag接口的实现类BodyTagSupport继承,为简化开发,推荐从BodyTagSupport类继承开发。

    编写标签对应的实现类时,需要重载BodyTagSupport类几个方法:doStartTag(), setBodyContent(), doInitBody(), doAfterBody(), doEndTag(),他们执行顺序如下:doStartTag()→doInitBody()→setBodyContent()→doAfterBody()→doEndTag()doStartTag()方法可返回EVAL_BODY_INCLUDE或SKIP_BODY,如果返回EVAL_BODY_ INCLUDE则继续执行;如果返回SKIP_BODY则接下来的doInitBody(),setBodyContent(), doAfterBody()三个方法不会被执行,而直接执行doEndTag()方法。

    setBodyContent()方法用于设置标签体内容,如果在此之前要作一些初始化工作,则在doInitBody()方法中完成。标签体内容执行完后,会调用doAfterBody()方法,此方法可返回EVAL_BODY_TAG, SKIP_BODY,

    EVAL_PAGE或SKIP_PAGE.如果返回EVAL_BODY_TAG则会再次设置标签体内容,直到返回SKIP_BODY;如果返回EVAL_PAGE则标签体执行完后会继续执行JSP页面中接下来的部分;如果返回SKIP_PAGE,则JSP页面的后续内容将不再执行。

共4页 首页 上一页 1 2 3 4 下一页 尾页 跳转到
相关内容
赞助商链接