自定义EL函数

自定义EL函数

EL函数不支持字符串连接的操作,即${“ab”+”cd”}这样的都不支持,可以通过自定义函数来解决这个问题。
下面以实现“将一个字符串转全部换为大写”的功能为例,来讲解自定义 EL 函数的过程。

1.定义Java方法

自定义一个类名为StringFunction的类,创建一个静态方法:

package com.monkey1024.el;

/**
 * 自定义EL函数
 *
 */
public class StringFunction {

    public static String toUpper(String str){
        return str.toUpperCase();
    }
}

2.创建标签

在 Web 项目的/WEB-INF 目录下,新建一个扩展名为.tld 的 XML 文件,例如 monkeyfn.tld。 tld的全称是Tag Library Definition,标签库定义,之后将定义好的函数,在这个文件中进行注册。

    <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>
        <!-- 指定该函数库的名称,一个函数库一个名称,随意命名,通常与文件名相同,这个名称在后面 JSP 中要使用。 -->
        <short-name>monkeyfn</short-name>
        <!-- 指定该函数库所对应的 URL,一个函数库一个 URL, URL 随意,在后面 JSP 中要使用该 URL -->
        <uri>http://www.monkey1024.com/jsp/monkeyTld</uri>

        <function>
            <!-- 指定将来在 JSP 的 EL 中使用该函数的名称。一般与类中静态方法同名。 -->
            <name>toUpper</name>
            <!-- 指定该函数定义在哪个类中 -->
            <function-class>com.monkey1024.el.StringFunction</function-class>
            <!-- 指定类中的方法 -->
            <function-signature>java.lang.String toUpper( java.lang.String )</function-signature>
        </function>
    </taglib>

3.使用自定义函数

首先在JSP中引入自定义函数库:

<!-- 引入自定义标签库 -->
<%@ taglib uri="http://www.monkey1024.com/jsp/monkeyTld" prefix="monkeyfn"%>

之后可以通过下面方式使用自定义函数:

${monkeyfn:toUpper("monkey1024") }

EL总结

  • 不能出现在 Java 代码块、表达式块等 JSP 的动态代码部分。
  • 只能从 pageConext、request、session、application 四大域属性空间中获取数据。
  • 不会抛出空指针异常。若访问一个 null 对象的属性,则什么也不显示。
  • 不会抛出数组访问越界异常。若访问一个数组中的不存在的元素,则什么也不显示。