自定义标签

阅读更多
http://www.cnblogs.com/eflylab/archive/2007/01/17/623163.html
自定义标签之 多个标签的嵌套
在实际开发中,往往需要多个标签的嵌套以完成一个任务,这样标签就存在父子关系。类似于下面:

   
            my    value is test1
   

   
            my value is  test2
   


在上面的标签中,为父标签,为子标签,一个父标签可以嵌套多个子标签和HTML,Scriptlets等。
下面就来写一个这样的标签
ifTag.java
package eflylab;
import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*;
import java.util.Hashtable;
import java.io.Writer;
import java.io.IOException;

/**
*if Tag
*usage:
*     
*     

*/
public class IfTag extends BodyTagSupport
{
    private boolean value;
    /**
     *设置属性的值。
     */
    public void setValue(boolean value)
    {
        this.value=value;
    }
   
    /**
     *doStartTag方法,如果value为true,那么
     *就计算tagbody的值,否则不计算body的值。
     */
    public int doStartTag() throws JspTagException
    {
        if(value)
        {
           System.out.println("value is true");
           return EVAL_BODY_INCLUDE;
         } 
         else
         {
           System.out.println("value is false");
            return SKIP_BODY;
         }
      }
        
    
    /**
     *覆盖doEndTag方法
     */
    public int doEndTag() throws JspTagException
    {
        try
        { 
             if(bodyContent != null) 
             {
                 bodyContent.writeOut(bodyContent.getEnclosingWriter());
             }
        }
        catch(java.io.IOException e)
        {
            throw new JspTagException("IO Error: " + e.getMessage()); 
        }  
        return EVAL_PAGE; 
    }
     
}

Value为IfTag的属性。当为真时,那么就计算IfTagBody;如果为假,就忽略

因为IfTag标签中要嵌套了一个子标签,这个子标签用于输出一些信息到客户端。
下面的是IfTag中嵌套的子标签。
OutTag.java
package eflylab;
import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*;
import java.util.Hashtable;
import java.io.Writer;
import java.io.IOException;

public class OutTag extends TagSupport
{
    private Object value;   
   
    /**
     *覆盖doStartTag方法
     */
   public void setValue(Object value)
   {
        this.value=value;
   }
  
    public int doStartTag() throws JspTagException {
        return EVAL_BODY_INCLUDE;
    }
   
    /**
     *覆盖doEndTag方法
     */
    public int doEndTag()throws JspTagException
    {

        try
        {
            System.out.println(value);
            pageContext.getOut().write(value.toString());
           
        }
        catch(IOException ex)
        {
            throw new JspTagException("Fatal error:hello tag conld not write to JSP out");
        }
        return EVAL_PAGE;
    }
     
}
OutTag就是一个简单的不带Body的标签,它主要向客户端输出一些信息。
下面是在标签描述文件中的声明,加入以下内容
        
        if
    eflylab.IfTag
    jsp
       
          value
          true
          true
     

   

      
        out
    eflylab.OutTag
    jsp
       
          value
          true
          true
     

    

测试代码:
<%@ taglib uri="/demotag" prefix="mt" %>


vcorwork  tag





协作标签

<%
boolean test=true;
String outValue="HelloWorld!";
%>
   
     
      这是mt:out>打印出的内容。
     

   



 


    
          这些内容会显示在客户端。
      





 

运行:

你可能感兴趣的:(jsp,自定义标签)