JavaEE中继承BodyTagSupport实现标签

标签一般执行顺序:doStartTag()->doAfterBodyTag()->doEndTag()->执行下面的网页

toUpperTag.java

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


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>

 

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


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>


//实现标签不仅仅可以用这种方法,还有很多种方法,请读者查阅。 转自网络 自己学习 共同努力

 

转载于:https://www.cnblogs.com/FacingSun/p/4424402.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值