JavaEE中继承BodyTagSupport实现标签

实现的效果是将标签内的文字大写。标签一般执行顺序:doStartTag()->doAfterBodyTag()->doEndTag()->执行下面的网页。

toUpperTag.java

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

/**
 * @author XY
 */
public class toUpperTag extends BodyTagSupport
{
 private static final long serialVersionUID = 1L;

 // 属性
 private String var;

 // 标签开始时调用的处理方法
 @Override
 public int doStartTag() throws JspException
 {
  // 表示需要处理标签体
  return EVAL_BODY_BUFFERED;
 }

 @Override
 public int doAfterBody() throws JspException
 {
  // 取得标签体对象
  BodyContent body = getBodyContent();
  // 取得标签体的字符串内容
  String content = body.getString();
  // 清除标签体中的内容
  body.clearBody();
  // 将内容转换成大写
  content = content.toUpperCase();
  // 在pageContext对象中保存变量
  this.pageContext.setAttribute(var, content);
  // 结束对标签体的处理
  return SKIP_BODY;
 }

 public String getVar()
 {
  return var;
 }

 public void setVar(String var)
 {
  this.var = var;
 }

}

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>xyTag</short-name>
 <tag>
  <name>touppercase</name>
  <tag-class>cn.xy.myTag.toUpperTag</tag-class>
  <body-content>tagdependent</body-content>
  <variable>
   <name-from-attribute>var</name-from-attribute>
   <variable-class>java.lang.String</variable-class>
   <scope>AT_BEGIN</scope>
  </variable>
  <attribute>
   <name>var</name>
   <required>true</required>
  </attribute>
 </tag>
</taglib>

该文件可以放在WEB-INF文件夹下。
xy.jsp
<%@ taglib uri="/WEB-INF/xy-tags.tld" prefix="xy"%>
<html>
<head>
<base href="<%=basePath%>">
</head>

<body>
 <xy:touppercase var="result">abcdefg</xy:touppercase><br>
 结果为<%=result%> | ${ result } | ${pageScope.result }
</body>
</html>

 

当然也可以将大写后的结果直接输出,修改对应的代码如下:

/**
 * @author XY
 */
public class toUpperTag extends BodyTagSupport
{
 private static final long serialVersionUID = 1L;

 // 属性
 private String var;

 // 标签开始时调用的处理方法
 @Override
 public int doStartTag() throws JspException
 {
  // 表示需要处理标签体
  return EVAL_BODY_BUFFERED;
 }

 @Override
 public int doAfterBody() throws JspException
 {
  try
  {
   // 输出
   JspWriter out = bodyContent.getEnclosingWriter();
   // 取得标签体对象
   BodyContent body = getBodyContent();
   // 取得标签体的字符串内容
   String content = body.getString();
   // 清除标签体中的内容
   body.clearBody();
   // 将内容转换成大写
   content = content.toUpperCase();
   // 输出
   out.print(content);
   // 清除
   body.clear();
  }
  catch (Exception e)
  {
   e.printStackTrace();
  }
  // 结束对标签体的处理
  return SKIP_BODY;
 }

 public String getVar()
 {
  return var;
 }

 public void setVar(String var)
 {
  this.var = var;
 }

}

<body>
 <xy:touppercase var="result">abcdefg</xy:touppercase>
</body>

实现标签不仅仅可以用这种方法,还有很多种方法,请读者查阅。


上一篇:自从学了这套框架,性能测试搞定了


下一篇:吴裕雄--天生自然--SPRING--Spring java配置