JavaEE中继承BodyTagSupport实现标签

本文介绍了一个实现将标签内文本转为大写的Java程序,并展示了如何将其整合到网页中,包括XML标签库定义、Java源代码实现以及实际应用示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实现的效果是将标签内的文字大写。标签一般执行顺序: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>

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值