在EL函数库中,我们学习的那些方法都是由JSTL提供的,我们自己也可以定义函数库。自定义EL函数库有以下三个步骤:
- 写一个类,在该类中定义一个有返回值的静态方法;
- 编写tld文件;
- 在页面中添加taglib指令,导入自定义标签库。
下面根据以上步骤,我们来完成自定义EL函数库,点击此处 下载案例源代码,具体如下所示:
(1)新建一个web应用Example9,在src目录下新建一个类,MyFunciton,主要代码如例1-1所示:
例1-1 MyFunction.java
package cn.itcast.fn; public class MyFunction { public static String print(){ return "创智播客之EL函数库"; } } |
例1-1中,MyFunction中的print()方法必须是静态的,有返回值的。
(2)因为tld文件我们不希望别人能够直接访问,因此我们将tld文件放在WEB-INF目录下。在该目录下创建一个目录tlds,然后将itcast.tld文件放在tlds目录中,文件内容如例1-2所示:
例1-2 itcast.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>itcast</description> <display-name>itcast-function</display-name> <tlib-version>1.0</tlib-version> <short-name>it</short-name> <uri>http://www.itcast.cn/el/functions</uri> <function> <name>print</name> <function-class>cn.itcast.fn.MyFunction</function-class> <function-signature>java.lang.String print()</function-signature> </function> </taglib> |
例1-2中,文件的头与约束都是从jstl函数库中的fn.tld文件中拷贝过来的,下面对文件中的比较重要的标签进行解析,如下所示:
- <tlib-version>:当前函数库的版本号;
- <short-name>:函数库的前缀,例如fn;
- <uri>:代表当前函数库的地址,在本案例中该标签不起作用;
- <function>:定义函数的一个标签;
- <name>:指明函数的名称;
- <function-class>:指明函数所在的类的名称;
- <function-signature>:指明函数的名字及返回值类型,如果有参数,也包括参数类型,如:<function-signature>boolean contains(java.lang.String, java.lang.String)</function-signature>。
另外在tld文件中,还存在一个标签,如下:
<function> <description> Tests if an input string contains the specified substring. </description> <name>contains</name> <function-class>org.apache.taglibs.standard.functions.Functions</function-class> <function-signature>boolean contains(java.lang.String, java.lang.String)</function-signature> <example> <c:if test="${fn:contains(name, searchString)}"> </example> </function> |
其中<example>标签表示的是该函数在jsp页面中的示范。
(3)在Example9的WebRoot目录下新建一个fn目录,然后在该目录下新建一个fn.jsp页面,主要代码如例1-3所示:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="it" uri="/WEB-INF/tlds/itcast.tld" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <h1>${it:print() }</h1> </body> </html> |
例1-3中,taglib指令中的uri属性的值为“/WEB-INF/tlds/itcast.tld”,该值正是itcast.tld文件的位置。
(4)将Example9发布到服务器,然后启动服务器,在浏览器端访问:http://localhost:8080/Example9/fn/fn.jsp,浏览器显示的结果如图1-1所示:
图1-1 浏览器显示结果
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/java/253218.html