7. 自定义EL函数

自定义EL函数

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

1.定义Java方法

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

package fun;
public
class upper { public static String toUpper(String str) { return str.toUpperCase(); } }

就是一个简单的静态函数 他把字符串转为大写返回。

 

2.创建标签

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

这个文件的名字你可以随便取,但一定要放在WEB-INF 这个目录下:

先讲一下这个tld文件中 需要什么和一些注解:

1️⃣ 这玩意: 头啊 复制就好了 别去记啊 用不着:

<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">

2️⃣ 版本号标签:随便来个即可

 <!-- 指定定义的当前函数库版本号。随意指定。 -->
        <tlib-version>1.0</tlib-version>

3️⃣函数库名称: 随便定义啊 一般和你文件名一样 这个name在JSP中导入要用的   【指定该函数库的名称,一个函数库一个名称】

<!-- 指定该函数库的名称,一个函数库一个名称,随意命名,通常与文件名相同,这个名称在后面 JSP 中要使用。 -->

<short-name>bihu</short-name>

4️⃣uri: 这玩意也是随便来 但是! 一般为自己公司域名 而且 在JSP中导入也要用到 

<!-- 指定该函数库所对应的 URL,一个函数库一个 URL, URL 随意,在后面 JSP 中要使用该 URL -->
<uri>bihu.com</uri>

5️⃣方法标签: 【<function>】

下面是你定义的方法的配置:包含3个:  <name> 、 <function-class> 、 <function-signature>

name是你在JSP的EL表达式用的方法名

 function-class 是这个方法的位置 包位

function-signature 是这个方法的解析 准确到包名 !!! 即: 返回值 方法名 (方法参数...)  

signature  sɪɡnətʃər 签名;署名;签字;签署;明显特征;鲜明特色;识别标志
<function>
            <!-- 指定将来在 JSP 的 EL 中使用该函数的名称。一般与类中静态方法同名。 -->
            <name>toUpper</name>
            <!-- 指定该函数定义在哪个类中 -->
            <function-class>fun.upper</function-class>
            <!-- 指定类中的方法 -->
            <function-signature>java.lang.String toUpper( java.lang.String )</function-signature>
        </function>

那么我们既然创建了静态方法toUpper,他属于fun包下,那么我们自定义一个EL函数:

index.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

    <%-- 这里用taglib 指令 导入函数库中的  uri  和 一个 prefix 函数库名 --%>    
  <%@ taglib uri="bihu.com" prefix="bihu"%>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>EL 自定义函数 的讲解</title>
</head>
<body>

        
    <%-- 这里用的是 bihu 这个 函数库 bihu这个函数库里面的 toUpper方法: --%>
    ${bihu:toUpper("abcd") }

</body>
</html>

然后我们看 tld 文件: 【bihu.tld】 记住啊!一定要存在WEB-INF这个文件夹下面!

<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>bihu</short-name>
        
        
        <uri>bihu.com</uri>


        <function>
            <name>toUpper</name>
            <function-class>fun.upper</function-class>
            <function-signature>java.lang.String toUpper( java.lang.String )</function-signature>
        </function>
        
    </taglib>

自行对应 upper类、JSP文件、bihu.tld文件 一一对应啊 :

其实你会发现他用的是我们刚开始讲的 taglib指令 然后用 函数库【tld文件】 中的 uri  和 short-name 在JSP中定位导入

而 EL表达式中是通过 函数库【tld文件】中 的 short-name 和  name【function 下的】,那么对应就是:

  ${short-name:name("assbcd") }

 

不用了解那么深 但是你的看得懂里面的 映射 和 标签即可!

本文来自博客园,作者:咸瑜,转载请注明原文链接:https://www.cnblogs.com/bi-hu/p/14832102.html

原文地址:https://www.cnblogs.com/bi-hu/p/14832102.html