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

 

 

目录
相关文章
|
8月前
|
开发框架 前端开发 Java
J2EE 通用分页01(超详细解析)
J2EE 通用分页01(超详细解析)
17 0
|
8月前
J2EE&JSP标签02&Foreach标签&select
J2EE&JSP标签02&Foreach标签&select
|
8天前
|
Java 数据处理
JSF 中模板(template)标签指令的使用
本文介绍了JSF中模板标签的使用,通过Facelets标签指令创建网页模板。将页面分为header, content和footer三部分,分别用header.xhtml, content.xhtml和footer.xhtml定义。主模板文件通过ui:insert和ui:include将子模块组装在一起,实现页面布局。最后简要提及了JSF标签库的作用和JSTL的相关内容。
21 2
|
19天前
|
Java
JavaSE基础篇:枚举的高级用法示例
JavaSE基础篇:枚举的高级用法示例
|
7月前
|
XML 开发框架 Java
J2EE之自定义标签库的使用02
J2EE之自定义标签库的使用02
37 0
|
7月前
|
XML 开发框架 Java
J2EE之自定义标签库的使用01(详情解答)
J2EE之自定义标签库的使用01(详情解答)
43 0
|
8月前
|
XML Java 数据格式
J2EE&JSP自定义标签库01&out标签&if标签
J2EE&JSP自定义标签库01&out标签&if标签
|
12月前
|
SQL 开发框架 Java
[J2EE规范]JDBC简单例子
[J2EE规范]JDBC简单例子
43 0
|
JavaScript Java 数据库连接
17、SpringBoot2.0中初始化数据和不校验 html 标签(十七)
我们在做测试的时候经常需要初始化导入一些数据,如何来处理呢?会有两种选择,一种是使用 Jpa,另外一种是 Spring JDBC 。两种方式各有区别下面来详细介绍。
129 0
|
编译器 Go
第五十章 开发自定义标签 - 使用Rule类
第五十章 开发自定义标签 - 使用Rule类
76 0