579
外匯
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="https://java.sun.com/xml/ns/javaee"
xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://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>
實現標簽不僅僅可以用這種方法,還有很多種方法,請讀者查閱。
最後更新:2017-04-03 14:53:38