首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

怎么自己定制一个jstl的标签

2012-03-01 
如何自己定制一个jstl的标签如何自己定制一个jstl的标签?[解决办法]jstl java standard tab libraryjstl

如何自己定制一个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//EN "
"http://java.sun.com/j2ee/dtds/web-app_2.2.dtd ">

<WEB-APP>

<TAGLIB>
<TAGLIB-URI>
HTMLEncode


</TAGLIB-URI>
<TAGLIB-LOCATION>
/WEB-INF/HTML_FormatTag.tld
</TAGLIB-LOCATION>
</TAGLIB>

</WEB-APP>

使用新的标签

自定义的标签设置好后,就可以用在你的JSP页面上了。要做到这一点,只需要在页面上使用taglib指示命令声明所要采用的标签即可。标签通过其唯一的 URI被索引,然后被分配给一个名字空间前缀(prefix)。这一前缀并没有什么特别的意义,只要它不与其它的名字空间冲突便可,可以任意。请参看以下的清单F和G。

清单F:在一个JSP页面上使用HTML编码标签

<%@ taglib uri= "HTMLEncode " prefix= "Examples " %>
<PRE>
<?XML:NAMESPACE PREFIX = Examples /><Examples:HTMLEncode>
< Hello , Simple sample >
</Examples:HTMLEncode>
</PRE>

清单G:范例代码的输出
< Hello , Simple sample >
which displays as:
< Hello , Simple sample >

热点排行