118
汽車大全
J2EE中自定義標簽以及TagSupport和BodyTagSupport的用法
StringAppendTags
package cn.xy.myTag;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;
public class StringAppendTags extends TagSupport
{
private static final long serialVersionUID = 1L;
public StringAppendTags()
{
}
@Override
public int doStartTag() throws JspException
{
return 1;
}
}
StringAppendTag
package cn.xy.myTag;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.BodyContent;
import javax.servlet.jsp.tagext.BodyTagSupport;
/**
* 標簽一般執行順序:doStartTag()->顯示文字->doAfterBodyTag()->doEndTag()->執行下麵的網頁
* @author xy
*
*/
public class StringAppendTag extends BodyTagSupport
{
private static final long serialVersionUID = 1L;
/**
* 值處理過後存儲在pageContext中的鍵
*/
private String key;
/**
* 標簽開始時調用該方法
*/
public int doStartTag() throws JspException
{
// 處理標簽體
return EVAL_BODY_BUFFERED;
}
/**
* 處理標簽體方法
*/
public int doAfterBody() throws JspException
{
// 標簽體對象
BodyContent body = getBodyContent();
// 標簽體中字符串內容
StringBuffer bodyContent = new StringBuffer(body.getString());
// 清除標簽體中內容
body.clearBody();
// 將處理過後的變量保存在pageContext對象
this.pageContext.setAttribute(key, bodyContent.append("xy").toString());
// 結束對標簽體的處理
return SKIP_BODY;
}
public String getKey()
{
return key;
}
public void setKey(String key)
{
this.key = key;
}
}
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>xy</short-name>
<uri>/xy-tags</uri>
<tag>
<name>StringAppenders</name>
<tag-class>cn.xy.myTag.StringAppendTags</tag-class>
<body-content>JSP</body-content>
</tag>
<tag>
<name>StringAppender</name>
<tag-class>cn.xy.myTag.StringAppendTag</tag-class>
<body-content>tagdependent</body-content>
<variable>
<name-from-attribute>key</name-from-attribute>
<variable-class>java.lang.String</variable-class>
<scope>AT_BEGIN</scope>
</variable>
<attribute>
<name>key</name>
<required>true</required>
</attribute>
</tag>
</taglib>
用法
<body>
<x:StringAppenders>
<x:StringAppender key="str1">I am </x:StringAppender>
<x:StringAppender key="str2">I am </x:StringAppender>
<x:StringAppender key="str3">I am </x:StringAppender>
</x:StringAppenders>
字符串添標簽的結果 ${ str1 } | ${pageScope.str1 } <br>
字符串添標簽的結果 ${ str2 } | ${pageScope.str2 } <br>
字符串添標簽的結果 ${ str3 } | ${pageScope.str3 } <br>
</body>
結果
字符串添標簽的結果 I am xy | I am xy
字符串添標簽的結果 I am xy | I am xy
字符串添標簽的結果 I am xy | I am xy
最後更新:2017-04-02 15:14:47