在EL函数库中,我们学习的那些方法都是由JSTL提供的,我们自己也可以定义函数库。自定义EL函数库有以下三个步骤:
- 写一个类,在该类中定义一个有返回值的静态方法;
- 编写tld文件;
- 在页面中添加taglib指令,导入自定义标签库。
下面根据以上步骤,我们来完成自定义EL函数库,点击此处 下载案例源代码,具体如下所示:
(1)新建一个web应用Example9,在src目录下新建一个类,MyFunciton,主要代码如例1-1所示:
例1-1 MyFunction.java
packagecn.itcast.fn; publicclass MyFunction { publicstatic String print(){ return"创智播客之EL函数库"; } } |
例1-1中,MyFunction中的print()方法必须是静态的,有返回值的。
(2)因为tld文件我们不希望别人能够直接访问,因此我们将tld文件放在WEB-INF目录下。在该目录下创建一个目录tlds,然后将itcast.tld文件放在tlds目录中,文件内容如例1-2所示:
例1-2 itcast.tld
"1.0"encoding="UTF-8"?> "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"> itcast itcast-function 1.0 it http://www.itcast.cn/el/functions print cn.itcast.fn.MyFunction java.lang.String print()
|
例1-2中,文件的头与约束都是从jstl函数库中的fn.tld文件中拷贝过来的,下面对文件中的比较重要的标签进行解析,如下所示:
- :当前函数库的版本号;
- :函数库的前缀,例如fn;
- :代表当前函数库的地址,在本案例中该标签不起作用;
- :定义函数的一个标签;
- :指明函数的名称;
- :指明函数所在的类的名称;
- :指明函数的名字及返回值类型,如果有参数,也包括参数类型,如:boolean contains(java.lang.String, java.lang.String)。
另外在tld文件中,还存在一个标签,如下:
Tests if an input string contains the specified substring. contains org.apache.taglibs.standard.functions.Functions boolean contains(java.lang.String, java.lang.String) |
其中
标签表示的是该函数在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"%>
"Content-Type"cOntent="text/html; charset=UTF-8">
${it:print()}
|
例1-3中,taglib指令中的uri属性的值为“/WEB-INF/tlds/itcast.tld”,该值正是itcast.tld文件的位置。
(4)将Example9发布到服务器,然后启动服务器,在浏览器端访问:http://localhost:8080/Example9/fn/fn.jsp,浏览器显示的结果如图1-1所示:
图1-1 浏览器显示结果
文章来源于网络,不代表本站任何观点。如有侵权或需授权才可以转载请联系管理员,我们核实信息后会在第一时间删除