如何自己定制一个jstl的标签
如何自己定制一个jstl的标签?
------解决方案--------------------jstl = java standard tab library
jstl人家都说了是标准嘛,你自己自定义的标签库怎呢会定制为jstl呢
------解决方案--------------------把JSTL源码下载下来,改写或增加新功能就行了
------解决方案--------------------建立一个自定义的标签
1.创建JavaBean
代码中的任何可重用部分都应该放到一个JavaBean中。这一点是很重要的。这样你就可以在其他项目中重用这些代码了。由于任何放置在标签处理器内的代码在标签外都是不可以重用的,因此将可重用的代码部分独立开来是很重要的。在这个例子总,为HTML编码的逻辑是常用的,因此放到JavaBean中,请参看清单B
清单B:HTML编码JavaBean
/* HTML_Format.java */
public class HTML_Format extends Object implements java.io.Serializable {
/** 创建新的HTML_Format */
public HTML_Format() {}
/** 将一个字符串中所有的所有 < 和 > 字符用响应的HTML编码代替 */
public String HTML_Encode(String as_data)
{
int li_len = as_data.length();
/*string buffer的长度要比原来的字符串长*/
StringBuffer lsb_encode = new StringBuffer(li_len + (li_len/10));
/* 循环替换全部的 < 和 > 字符 */
for( int li_count = 0 ; li_count < li_len ; li_count++)
{ String ls_next = String.valueOf(as_data.charAt(li_count));
if (ls_next.equals( " < ")) ls_next = " < ";
if (ls_next.equals( "> ")) ls_next = "> ";
lsb_encode.append( ls_next );
}
return( lsb_encode.toString() );
}
}
2.创建标签处理器
标签处理器的代码请参看清单C:
清单C:HTML编码标签处理器
import
java.io.IOException;
import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*;
public class HTML_FormatTag extends BodyTagSupport
{
/* 1) 在标签末将会调用这个函数 */
public int doEndTag() throws JspTagException
{
try
{ /* 2)得到标签中的文本 */
BodyContent l_tagbody = getBodyContent();
String ls_output = " ";
/* 3)如果标签体有文本,就处理它 */
if(l_tagbody != null)
{ HTML_Format l_format = new HTML_Format();
/* 3a) 将标签体的内容转换为一个字符串 */
String ls_html_text = l_tagbody.getString();
ls_output = l_format.HTML_Encode(ls_html_text);
}
/* 4)将结果写回到数据流中 */
pageContext.getOut().write(ls_output.trim());
}
catch (
IOException e)
{ throw new JspTagException( "Tag Error: " + e.toString());
}
/* 让JSP继续处理以下页面的内容 */
return EVAL_PAGE;
}
}
这个处理很简单,它包括有:
1.读入位于开始和结束标签间的文本
2.调用html编码函数
3.将结果返回到JSP页面。
3.创建标签描述符
我们需要描述自定义标签以让系统知道如何处理。该描述文件的后缀为.tld,TLD文件通常就以标签处理器命名,并存放在“/WEB-INF/”目录之下。请参看清单D。
清单D:HTML编码标签描述器
<?xml version= "1.0 " encoding= "UTF-8 " ?>
<!DOCTYPE taglib
PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN "
"http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd ">
<TAGLIB>
<TLIBVERSION>1.0</TLIBVERSION>
<JSPVERSION>1.1</JSPVERSION>
<SHORTNAME>HTML_FormatTag</SHORTNAME>
<URI></URI>
<INFO>HTML Encoding Tag </INFO>
<TAG>
<NAME>HTMLEncode</NAME>
<TAGCLASS>HTML_FormatTag</TAGCLASS>
<INFO>Encode HTML</INFO>
</TAG>
</TAGLIB>
更新Web XML文件
现在可以告诉JSP容器如何使用标签库了。为此要修改web.xml文件,具体说来是要在其中加入一个taglib的项目来注册该标签库,并为标签分配一个URI。URI是Web站点上唯一应用于这一特定标签的索引。由于标签今后还可能用在不同的Web站点上,所以你最好采用完整的URL和/或者包名字(package name)来保证这一唯一性。这个例子是简化了,示例代码请参看清单E。
清单E:修改web.xml文件
<?xml version= "1.0 " encoding= "ISO-8859-1 "?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2