您的位置:程序门 -> java -> web 开发



如何自己定制一个jstl的标签


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


如何自己定制一个jstl的标签
发表于:2007-01-09 16:18:54 楼主
如何自己定制一个jstl的标签?
发表于:2007-01-09 23:47:371楼 得分:0
jstl   =   java   standard   tab   library  

jstl人家都说了是标准嘛,你自己自定义的标签库怎呢会定制为jstl呢
发表于:2007-01-10 09:30:402楼 得分:0
把jstl源码下载下来,改写或增加新功能就行了
发表于:2007-01-10 10:33:423楼 得分:0
建立一个自定义的标签

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   >
发表于:2007-01-10 15:31:214楼 得分:0
谢谢楼上的,俺已经知道怎么用了,昨天看了一天的书终于写出来一个,和你这个过程是一样的   。看了你的回帖验证了我的过程是对的!


快速检索

最新资讯
热门点击