jackyrong

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

 一直十分喜欢jsp 2.0的,其中自觉对jsp 2.0的标签库认识不够,故学习之,在学习中,发现在标签库中,有一类可以被称为
函数式标签库的标签,其功能主要是通过EL(表达式语言)对静态函数方法的调用,这可以简化一些标签的开发。

    想象在一个投票系统中,要展示投票的结果。假设有一个栏位要展示的是投票类型,比如展示给用户的是:单选,多选(当然,一般没
投票会在显示结果时这么傻展示出来的),而数据库中一般存储的是KEY,展示给用户的一般是value,则在页面展示时需要进行转换给用户看。
则我们先构造一个类,比如
package liao.vote;
public class votefunction
{

    public static String changevotetype(int value)
{
//intvalue:这里比如是来自数据库的KEY
//在这里做转换的工作,这里省略了。。。。

}
}


然后设计自定义的标签库,比如vote.tld,如下结构
<?xml version="1.0" encoding="UTF-8" ?>

<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
    version="2.0">
   
  <description>vote</description>
  <display-name>vote</display-name>
  <tlib-version>1.1</tlib-version>
  <short-name>vote</short-name>
  <uri>http://liao</uri>

  <function>
   <name>changevotetype</name>
   <function-class>liao.vote.VoteFunction</function-class>
   <function-signature>java.lang.String votetype( java.lang.String )</function-signature>
  </function>
  
  ......下面的形式雷同,可以有很多个<function> 
   
</taglib>
其中,<name>指名了函数的名称,这里是changevotetype,要和之前定义的名称一致,<function-class>指明了类的全名,要包括包名,而
<function-signature>则实际上是对函数的一个简单描述

当然,最后我们还要在web.xml里对其进行定义
<jsp-config>
  <taglib>
   <taglib-uri>http://liao/vote</taglib-uri>
   <taglib-location>/WEB-INF/taglib/vote.tld</taglib-location>
  </taglib>
 </jsp-config>
注意把vote.tld放在WEB-INF/taglib文件夹下

在具体使用时,比如在JSP页面里
<%@ taglib prefix="vote" uri="http://liao/vote"%>
注意这里的uri要和web.xml里设置的<taglib-uri>相同

在实际调用时,如下方法调用
${vote:changevotetype{vote.votetype}}
其中vote.votetype是数据库里调用出来的key的值了,这里不详细展开。




posted on 2006-08-06 17:45  jackyrong的世界  阅读(880)  评论(0编辑  收藏  举报