自定义标签的扩展

  • 控制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>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342

推荐阅读更多精彩内容

  • 一、 自定义标签简介 自定义标签主要用于移除jsp页面中的java代码。工程(tag) 使用自定义标签移除jsp页...
    yjaal阅读 786评论 1 4
  • 传统标签技术复杂 写一个类实现Tag接口 写一个tld文件,描述写好的类 在JSP页面引入tld文件,就可以在JS...
    newdolphintime阅读 385评论 0 1
  • 自定义标签可以实现的功能: 移除jsp中的java代码 控制jsp中的某段程序是否执行 控制jsp页面中的所有内容...
    he_321阅读 370评论 0 2
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,594评论 18 139
  • 感遇二首 张九龄 兰叶春葳蕤,桂华秋皎洁 欣欣此生意,自尔为佳节 谁知林栖者,闻风坐相悦 草木有本心,何求美人折 ...
    亦频阅读 509评论 0 0