美文网首页
自定义标签的扩展

自定义标签的扩展

作者: 基本密码宋 | 来源:发表于2017-07-06 22:17 被阅读13次
  • 控制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"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>控制标签体是否执行</title>
</head>
<body>
        <jeno:Demo1>
             看看执行了吗?
        </jeno:Demo1> 
</body>
</html>
  • 控制整个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"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>控制整个jsp页面是否执行</title>
</head>
<jeno:Demo2/>
<body>
         整个界面是否执行了呢?
         
</body>
</html>
  • 控制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"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>控制jsp页面内容重复执行。</title>
</head>
 
<body>
         
         <jeno:Demo3>
              看看执行了多少次 <br>
         </jeno:Demo3>
</body>
</html>
  • 修改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"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>得到标签体内的数据</title>
</head>
 
<body>
         <jeno:Demo4>
             jeno_jibenmima
         </jeno:Demo4>
</body>
</html>

最后是 .tld文件配置文件

<?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">
    
    <description>A tag library exercising SimpleTag handlers.</description>
    <tlib-version>1.0</tlib-version>
    <short-name>SimpleTagLibrary</short-name>
    <uri>/jeno</uri>
    
    
     <tag>
        <name>viewIP</name> <!-- 为标签处理器类配一个标签名 -->
        <tag-class>jeno.com.tld.ViewIPTag</tag-class>
        <body-content>empty</body-content>
    </tag>
    
    
     <tag>
        <name>Demo1</name> <!-- 为标签处理器类配一个标签名 -->
        <tag-class>jeno.com.tld.Demo1</tag-class>
        <body-content>JSP</body-content>
    </tag>
    
    
    <tag>
        <name>Demo2</name> <!-- 为标签处理器类配一个标签名 -->
        <tag-class>jeno.com.tld.Demo2</tag-class>
        <body-content>JSP</body-content>
    </tag>
    
     <tag>
        <name>Demo3</name> <!-- 为标签处理器类配一个标签名 -->
        <tag-class>jeno.com.tld.Demo3</tag-class>
        <body-content>JSP</body-content>
    </tag>
    
      <tag>
        <name>Demo4</name> <!-- 为标签处理器类配一个标签名 -->
        <tag-class>jeno.com.tld.Demo4</tag-class>
        <body-content>JSP</body-content>
    </tag>
</taglib>

相关文章

  • XM知识点总结

    概念Extensible Markup Language 可扩展标记语言 * 可扩展:标签都是自定义的. ...

  • XML

    XML: 概念:Extensible Markup Language 可扩展标记语言可扩展:标签都是自定义的。功能...

  • XML

    XML 概念:Extersible markupp Language可扩展标记语言可扩展:标签都是自定义的。 功能...

  • XML

    XML:1. 概念:Extensible Markup Language 可扩展标记语言* 可扩展:标签都是自定义...

  • XML相关笔记

    XML:1. 概念:Extensible Markup Language 可扩展标记语言* 可扩展:标签都是自定义...

  • JAVAWeb——XML解析

    XML基本概念 Extensible Markup Language 可扩展标记语言 可扩展:标签都是自定义的 功...

  • Spring的自定义标签

    Spring为自定义xml标签加载提供了扩展。用户可自定义标签并注册到Spring的bean容器中。实现较为复杂的...

  • 组件、父子间的通信

    自定义的控件(自定义的标签),能够封装可重用的代码,可扩展HTML标签功能 全局组件 不同作用域内均可使用 定义...

  • dubbo服务导出

    dubbo版本:2.7.2 一、spring解析自定义扩展标签。 spring分析xml节点的可以看出对于自定义命...

  • 自定义标签的扩展

    控制jsp页面某一部分内容是否执行。 编写一个类实习Tag接口,控制 doStartTag()方法的返回值。如果返...

网友评论

      本文标题:自定义标签的扩展

      本文链接:https://www.haomeiwen.com/subject/odjzcxtx.html