Tablib指令表示定义一个标签库以及其自定义标签的前缀,其语法格式为:
<%@taglib prefix="tagPrefix" uri="URIToTagLibrary" tagdir="" %>
其中:prefix表示自定义标签之前的前缀,如<c:if>当中的c就是通过这个属性定义的,如果不定义系统中是会报错的。
uri表示URI(Uniform Resource Identifier)根据标签的前缀对自定义的标签进行唯一地命名(或者说类库的地址),它可以是URL(Uniform Resource Locator)或URN(Uniform Resource Name),一个相对或绝对的路径。
tagdir: 区别于uri属性,uri属性告知的是具体TLD标签文件的目录。要是想使用一个没有创建TLD的标签文件,你必须将这个标签文件保存在WEB-INF/tags目录下,这样就告诉容器在这个目录下所找到的所有标签文件都属于同一个标签库。
(具体可以参考:http://toyota2006.iteye.com/blog/26575)
需要注意的是:在使用自定义标签之前必须使用“<%@taglib %>”指令将标签引入到页面,而且可以在一个页面中多次使用,但是前缀必须唯一。
2、在项目中导入或使用使用标签:
a、导入系统中已经存在的标签,如常用的c标签:
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
b、导入自定义的标签:
首先需要自定义一个java类(UFunction.java),用来实现自定义标签的各个方法。
package com.wjl.taglib; /** * 定义El自定义函数来截取字符串 * */ public class UFunction { /** * 获取一个字符串的长度 * @param str 需要进行长度计算的字符串 * @return int 字符串的长度 * */ public static int getLen(String str){ return str.length();//调用String的length方法获取当前字符串长度 } /** * 截取字符串 * @param str:需要进行截取的字符串 * @param start:开始截取的位置 * @param end:结束截取的位置 * @return String:按照要求截取之后的结果 * */ public static String substr(String str,int start,int end){ return str.substring(start,end);//调用String的substring方法进行截取 } /** * 两数相除获取整数结果 * @param first:除数 * @param second:被除数 * @return int:两数相除获取整数结果 * */ public static int getResult(int first,int second){ return first/second;//两数相除(暂时不作被除数为0的考虑) } }
然后在WEB-INF下面建立一个tld(myTag.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"> <tlib-version>1.0</tlib-version> <short-name>len</short-name> <function> <description>get the string length</description><!-- 对这个EL方法进行描述 --> <name>getLen</name><!-- 调用El方法的名字 --> <function-class>com.wjl.taglib.UFunction</function-class><!-- 所使用的类 --> <function-signature>int getLen(java.lang.String)</function-signature> <example>${len:getLen(str)}</example><!-- 举例 --> </function> <function> <description>substring</description> <name>substr</name> <function-class>com.wjl.taglib.UFunction</function-class> <function-signature>java.lang.String substr(java.lang.String,int,int)</function-signature> </function> <function> <description>getResult</description> <name>getResult</name> <function-class>com.wjl.taglib.UFunction</function-class> <function-signature>int getResult(int,int)</function-signature> </function> </taglib>
最后新建一个jsp页面进行测试:
<body> <c:set var="str" value="自定义函数,做一个截取字符串长度的测试"></c:set> 字符串内容为:${str }<br /><br /> 字符串长度为:${myTag:getLen(str)}<br /><br /> 字符串截取前五个字符串:${myTag:substr(str,0,5)}<br /><br /> 10除以2的结果为:${myTag:getResult(10,2)}<br /><br /> <!-- 若是字符过长只显示前10,后面的用省略号代替 --> <c:choose> <c:when test="${myTag:getLen(str)>10}"> <c:out value="${myTag:substr(str,0,10)}......"></c:out> </c:when> <c:otherwise> <c:out value="${str}"></c:out> </c:otherwise> </c:choose> </body>
注意:记得导入标签库。
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@taglib prefix="myTag" uri="/WEB-INF/myTag.tld" %>
也可以参考我的另一篇博文:JSTL截取字符串