全国咨询/投诉热线:400-618-9090

首页技术文章正文

JAVA培训之自定义EL函数库

更新时间:2017-04-16 来源:黑马程序员Java培训学院 浏览量:

EL函数库中,我们学习的那些方法都是由JSTL提供的,我们自己也可以定义函数库。自定义EL函数库有以下三个步骤:
  • 写一个类,在该类中定义一个有返回值的静态方法;
  • 编写tld文件;
  • 在页面中添加taglib指令,导入自定义标签库。
下面根据以上步骤,我们来完成自定义EL函数库,点击此处 1554260397032_1492336640063055268.png下载案例源代码,具体如下所示:
(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>
      &lt;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所示:
1554260402641_1492336640094003686.png图1-1 浏览器显示结果


本文版权归黑马程序员Java培训学院所有,欢迎转载,转载请注明作者出处。谢谢!

作者:黑马程序员Java培训学院

首发:http://www.itheima.com/special/hmjavaeezly/


javaee

python

web

ui

cloud

test

c

netmarket

pm

Linux

movies

robot

http://www.itcast.cn/subject/uizly/index.shtml?seozxuids

14天免费试学

基础班入门课程限时免费

申请试学名额

15天免费试学

基础班入门课程限时免费

申请试学名额

15天免费试学

基础班入门课程限时免费

申请试学名额

15天免费试学

基础班入门课程限时免费

申请试学名额

20天免费试学

基础班入门课程限时免费

申请试学名额

8天免费试学

基础班入门课程限时免费

申请试学名额

20天免费试学

基础班入门课程限时免费

申请试学名额

5天免费试学

基础班入门课程限时免费

申请试学名额

0天免费试学

基础班入门课程限时免费

申请试学名额

12天免费试学

基础班入门课程限时免费

申请试学名额

5天免费试学

基础班入门课程限时免费

申请试学名额

5天免费试学

基础班入门课程限时免费

申请试学名额

10天免费试学

基础班入门课程限时免费

申请试学名额
在线咨询 我要报名