自定义标签的扩展

  • 控制jsp页面某一部分内容是否执行。

编写一个类实习Tag接口,控制 doStartTag()方法的返回值。如果返回 Tag.EVAL_BODY_INCLUDE 是执行标签体。反之返回Tag.SKIP_BODY是不执行标签体内的代码。

/**
 * 控制 jsp 页面中某一部分代码是否执行
 */
public class Demo1 implements Tag {

    @Override
    public int doEndTag() throws JspException {
         
        return 0;
    }

    @Override
    public int doStartTag() throws JspException {
         
          return Tag.SKIP_BODY;//不执行标签体
//      return Tag.EVAL_BODY_INCLUDE;//执行标签体
    }

    @Override
    public Tag getParent() {
         
        return null;
    }

    @Override
    public void release() {
         

    }

    @Override
    public void setPageContext(PageContext arg0) {
     

    }

    @Override
    public void setParent(Tag arg0) {
    }

}
<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<%@taglib uri="/jeno" prefix="jeno"%>



控制标签体是否执行


        
             看看执行了吗?
         


  • 控制整个jsp页面是否执行。

编写一个类实现Tag接口。控制 doEndTag();如果返回Tag.EVAL_PAGE则执行余下的 jsp代码 。反之返回Tag.SKIP_PAGE则不执行余下的jsp代码。

/**
 * 控制整个 Jsp 界面是否执行
 *
 */
public class Demo2 implements Tag {

    @Override
    public int doEndTag() throws JspException {
         
//      return Tag.SKIP_PAGE;//不执行余下的jsp代码
            return Tag.EVAL_PAGE;//执行余下的 jsp代码 
    }

    @Override
    public int doStartTag() throws JspException {
        // TODO Auto-generated method stub
        return 0;
    }

    @Override
    public Tag getParent() {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public void release() {
        // TODO Auto-generated method stub

    }

    @Override
    public void setPageContext(PageContext arg0) {
        // TODO Auto-generated method stub

    }

    @Override
    public void setParent(Tag arg0) {
        // TODO Auto-generated method stub

    }

}
<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<%@taglib uri="/jeno" prefix="jeno"%>



控制整个jsp页面是否执行



         整个界面是否执行了呢?
         


  • 控制jsp页面内容重复执行。

编写一个类实现IterationTag()接口。控制doAfterBody()的返回值。返回EVAL_BODY_AGAIN为执行一次。返回SKIP_BODY为终止重复执行。

也可以 继承 extends TagSupport 进行操作返回值

public class Demo3 implements IterationTag{
        
    private int index=0;
    @Override
    public int doEndTag() throws JspException {
        // TODO Auto-generated method stub
        return 0;
    }

    @Override
    public int doStartTag() throws JspException {
        // TODO Auto-generated method stub
        return Tag.EVAL_BODY_INCLUDE;//执行标签体
    }

    @Override
    public Tag getParent() {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public void release() {
        // TODO Auto-generated method stub
        
    }

    @Override
    public void setPageContext(PageContext arg0) {
        // TODO Auto-generated method stub
        
    }

    @Override
    public void setParent(Tag arg0) {
        // TODO Auto-generated method stub
        
    }

    @Override
    public int doAfterBody() throws JspException {
        index++;
        if (index==8) {
            return IterationTag.SKIP_BODY; //返回这个将终止
        }else
         return IterationTag.EVAL_BODY_AGAIN;//返回一次,执行一次标签体
        
    }

}

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<%@taglib uri="/jeno" prefix="jeno"%>



控制jsp页面内容重复执行。

 

         
         
              看看执行了多少次 
  • 修改jsp页面内容输出。

编写一个类继承 BodyTagSupport 类。控制 doStartTag()的返回值。返回** BodyTag.EVAL_BODY_BUFFERED** 则web服务器会创建 bodycontent对象并捕获标签体。我们可以在doEndTag()方法中拿到标签体的内容。

public class Demo4 extends BodyTagSupport {
 
    //bodycontent
        @Override
        public int doStartTag() throws JspException {
            return BodyTag.EVAL_BODY_BUFFERED;
        }
        
        @Override
        public int doEndTag() throws JspException {
            //拿到标签体
            String content = this.getBodyContent().getString();
            String result = content.toUpperCase();
            try {
                this.pageContext.getOut().write(result);
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
            return Tag.EVAL_PAGE;
        }

        
}

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<%@taglib uri="/jeno" prefix="jeno"%>



得到标签体内的数据

 

         
             jeno_jibenmima
         


最后是 .tld文件配置文件



    
    A tag library exercising SimpleTag handlers.
    1.0
    SimpleTagLibrary
    /jeno
    
    
     
        viewIP 
        jeno.com.tld.ViewIPTag
        empty
    
    
    
     
        Demo1 
        jeno.com.tld.Demo1
        JSP
    
    
    
    
        Demo2 
        jeno.com.tld.Demo2
        JSP
    
    
     
        Demo3 
        jeno.com.tld.Demo3
        JSP
    
    
      
        Demo4 
        jeno.com.tld.Demo4
        JSP
    

你可能感兴趣的:(自定义标签的扩展)