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>


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


你可能感兴趣的:(标签,bodytagsupport)