zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Qt实战6.万能的无边框窗口(FramelessWindow)
    Qt实战5.如何获取USB设备信息?
    Qt实战4.简单封装的文件监控
    Qt实战3.Qt仿Win10风格界面
    Linux下使用脚本让程序顺序启动
    项目经验1.软件的开发过程
    Qt实战2.老生常谈的文件传输
    mysql导入txt文件
    linux离线安装python3
    mysql知识点
  • 原文地址:https://www.cnblogs.com/bi-hu/p/14832102.html
Copyright © 2011-2022 走看看