J2EE中自定义标签以及TagSupport和BodyTagSupport的用法

简介:

 

StringAppendTags

 

package cn.xy.myTag;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;

public class StringAppendTags extends TagSupport
{
 private static final long serialVersionUID = 1L;

 public StringAppendTags()
 {

 }

 @Override
 public int doStartTag() throws JspException
 {
  return 1;
 }

}

StringAppendTag

package cn.xy.myTag;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.BodyContent;
import javax.servlet.jsp.tagext.BodyTagSupport;

/**
 * 标签一般执行顺序:doStartTag()->显示文字->doAfterBodyTag()->doEndTag()->执行下面的网页
 * @author xy
 *
 */
public class StringAppendTag extends BodyTagSupport
{
 private static final long serialVersionUID = 1L;

 /**
  * 值处理过后存储在pageContext中的键
  */
 private String key;

 /**
  * 标签开始时调用该方法
  */
 public int doStartTag() throws JspException
 {
  // 处理标签体
  return EVAL_BODY_BUFFERED;
 }

 /**
  * 处理标签体方法
  */
 public int doAfterBody() throws JspException
 {
  // 标签体对象
  BodyContent body = getBodyContent();

  // 标签体中字符串内容
  StringBuffer bodyContent = new StringBuffer(body.getString());

  // 清除标签体中内容
  body.clearBody();

  // 将处理过后的变量保存在pageContext对象
  this.pageContext.setAttribute(key, bodyContent.append("xy").toString());

  // 结束对标签体的处理
  return SKIP_BODY;
 }

 public String getKey()
 {
  return key;
 }

 public void setKey(String key)
 {
  this.key = key;
 }
}

 

xy-tags.tld

<?xml version="1.0" encoding="UTF-8"?>
<taglib version="2.1" xmlns="http://java.sun.com/xml/ns/javaee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee web-jsptaglibrary_2_1.xsd">
 <tlib-version>1.0</tlib-version>
 <short-name>xy</short-name>
 <uri>/xy-tags</uri>
 <tag>
  <name>StringAppenders</name>
  <tag-class>cn.xy.myTag.StringAppendTags</tag-class>
  <body-content>JSP</body-content>
 </tag>
 <tag>
  <name>StringAppender</name>
  <tag-class>cn.xy.myTag.StringAppendTag</tag-class>
  <body-content>tagdependent</body-content>
  <variable>
   <name-from-attribute>key</name-from-attribute>
   <variable-class>java.lang.String</variable-class>
   <scope>AT_BEGIN</scope>
  </variable>
  <attribute>
   <name>key</name>
   <required>true</required>
  </attribute>
 </tag>
</taglib>

 

用法

<body>
 <x:StringAppenders>
  <x:StringAppender key="str1">I am </x:StringAppender>
  <x:StringAppender key="str2">I am </x:StringAppender>
  <x:StringAppender key="str3">I am </x:StringAppender>
 </x:StringAppenders>

 字符串添标签的结果 ${ str1 } | ${pageScope.str1 } <br>
 字符串添标签的结果 ${ str2 } | ${pageScope.str2 } <br>
 字符串添标签的结果 ${ str3 } | ${pageScope.str3 } <br>

</body>

 

 

结果

 

字符串添标签的结果 I am xy | I am xy
字符串添标签的结果 I am xy | I am xy
字符串添标签的结果 I am xy | I am xy

 

 

目录
相关文章
|
算法 Python
Python高级算法——回溯法(Backtracking)
Python高级算法——回溯法(Backtracking)
881 2
|
编解码 人工智能 物联网
如何快速搭建一个像“天猫精灵”的智能语音助手?
天猫精灵相信大家都不陌生了,它是阿里巴巴于2017年7月5日发布的AI智能终端品牌。让用户以自然语言对话的交互方式,实现影音娱乐、购物、信息查询、生活服务等功能操作,成为消费者的家庭助手。本文将介绍如何快速搭建一个像“天猫精灵”一样聪明的智能语音助手。
如何快速搭建一个像“天猫精灵”的智能语音助手?
|
自然语言处理 前端开发 搜索推荐
一套成熟的CMS需要具备的优势
在互联网发达的时代,网站搭建已经不再是一个高门槛的事情,内容管理系统(CMS)使您能够在不触及任何底层代码的情况下控制网站的内容、设计和功能。它是一个全能的助手,可以让用户轻松管理和发布内容,定制网站外观,扩展功能,以及追踪关键指标。 互联网上有数百种内容管理系统,每种系统都提供独特的功能以满足不同的业务需求。要选择最适合您业务的CMS,您需要确保其功能与您的需求和目标相匹配。
164 16
|
存储 缓存 安全
HashMap VS TreeMap:谁才是Java Map界的王者?
【6月更文挑战第18天】Java的HashMap和TreeMap各具特色。HashMap基于哈希表,提供快速但无序的O(1)操作,适合高性能需求;TreeMap采用红黑树,保证有序性,适合排序和遍历。两者皆非线程安全,需在多线程环境中额外同步。选择时应依据具体需求和场景。
242 0
|
存储 安全 Java
settings.xml详解(很详细读这一篇就够了)
settings.xml是Java项目中用于配置Maven的重要文件,它详细规定了Maven的运行规则和行为。该文件通常位于用户家目录下的.m2文件夹中,或者项目根目录下的.mvn文件夹内。settings.xml中包含了众多配置项,从代理设置、镜像仓库配置,到服务器认证信息、插件组等,均可以在此文件中进行细致定义。通过合理配置settings.xml,我们可以优化Maven的依赖下载速度,保障仓库访问的安全性,甚至实现私有仓库的搭建与管理。深入了解settings.xml的每一项配置,对于提高Maven使用效率、保障项目构建稳定性具有重要意义。因此,无论是Maven初学者还是资深用户,都应仔
13748 3
|
机器人
用八爪鱼RPA实现员工薪资管理,轻松拆分发放工资单!
RPA(机器人流程自动化)技术可以极大地压缩、优化现有的员工薪资管理流程。通过使用rpa机器人,可以自动化个税计算和申报,自动化工资单处理和发放等重复性、繁琐的任务。这样可以节省大量人力和时间,提高工作效率,减少错误和延误,提升员工满意度。同时,rpa还可以保证数据的准确性,提高工资管理的合规性,增强企业的信誉。
|
存储 关系型数据库 MySQL
深入浅出MySQL MRR(Multi-Range Read)
在探索数据库优化的广阔领域中,我们不可避免地会遇到一系列独特的概念和技术。其中之一就是MySQL的多范围读取(Multi-Range Read, MRR)
865 0
深入浅出MySQL MRR(Multi-Range Read)
|
Java 容器
17 如何修改SpringBoot的默认配置
17 如何修改SpringBoot的默认配置
274 0
|
弹性计算 负载均衡 Cloud Native
Soul 云原生网关最佳实践
我们通过 MSE 云原生网关,将流量、安全、微服务网关三合一,大幅降低请求链路条数、降低架构复杂度、运维和故障排查成本,例如降低整个链路 RT 峰值从500ms下降至峰值50ms,服务发布期间502降为0,499平均降低10%等。
Soul 云原生网关最佳实践
|
安全 Ubuntu 测试技术
kali介绍
本篇主要介绍Kali系统和用于渗透测试的靶机系统,内容包括kali的发展过程、kali的功能、kali系统的安装和基本设置,以及目前流行的几种靶机系统介绍
kali介绍