• 自定义el函数


         对于el表达式大家都很熟悉,可是对于el函数,大家可能就不是很熟悉了,其实一些el函数的使用可以方便我们的开发,比如我们想要将一个数据变成大写,就可以调用sun公司给我们提供的el函数,然后直接在页面写成${fn:toUpperCase('string') }。如果要去掉空格的话,我们直接这样写${fn:trim('  ssf     ') }就可以了。但是,在实际的开发中,在一些特殊的应用场景,sun公司提供给我们的一些el函数已经不能满足我们的需求时,我们就必须自己定义一些自己的el函数,所以下面我们就来介绍自定义el函数的方法和步骤。

    1.你要使用el表达式,那么你就必须导入el表达式相关的jar包:jstl.jar  和 standard.jar 两个jar包,因为maven实在太方便了,所以我们这里采用了maven导入的方式。

    <dependency>
        <groupId>org.apache.taglibs</groupId>
        <artifactId>taglibs-standard-impl</artifactId>
        <version>1.2.5</version>
    </dependency>
    <dependency>
        <groupId>javax.servlet.jsp.jstl</groupId>
        <artifactId>javax.servlet.jsp.jstl-api</artifactId>
        <version>1.2.1</version>
    </dependency>

    2.接下来新建一个类并在里面编写一个静态的方法,(该方法必须时静态的)

    package com.el.servlet;
    
    /**
     * 自定以el函数
     * 该类中的函数filter主要时用来将html中的标签在页面原样输出,比如<a href="www.baidu.com">百度</a>,如果不做
    *转义处理,那么输出的话,只有"百度"两个字,如果做了转义,那么就会原样输出<a href="www.baidu.com">百度</a>
    */ public class HtmlFilter { // el函数必须是静态的,并且在tld文件中描述一下,放在WEB-INF目录下面 public static String filter(String message) { if (message == null) return (null); char content[] = new char[message.length()]; message.getChars(0, message.length(), content, 0); StringBuilder result = new StringBuilder(content.length + 50); for (int i = 0; i < content.length; i++) { switch (content[i]) { case '<': result.append("&lt;"); break; case '>': result.append("&gt;"); break; case '&': result.append("&amp;"); break; case '"': result.append("&quot;"); break; default: result.append(content[i]); } } return (result.toString()); } }

    3.el函数调用java类的静态方法已经写好了,接下来,我们需要在WEB-INF文件下面(WEB-INF子目录也可以)新建一个tld文件,这里文件名是my.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>A tag library exercising SimpleTag handlers.</description>
        <tlib-version>1.0</tlib-version>
        <short-name>SimpleTagLibrary</short-name>
        <uri>/my</uri>
        <!-- 函数配置 -->
        <function>
            <!-- 描述信息 -->
            <description>Converts the string to all caps</description>
            <!-- 调用的时用的名称,一般函数名称保持一致 -->
            <name>filter</name>
            <!-- 函数所在类的全类名 -->
            <function-class>com.el.servlet.HtmlFilter</function-class>
            <!-- 方法名称 -->
            <function-signature>java.lang.String filter( java.lang.String )</function-signature>
        </function>
    </taglib>

    4.到这里的话,我们已经把我们的自定义el函数已经编写好了,接下来就可以在jsp页面中去使用了

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%--导入自定义el函数的标签库 --%>
    <%@ taglib uri="/my" prefix="my"%>
    <!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>自定义el函数</title>
    </head>
    <body>
        ${my:filter("<a href='www.baidu.com'>百度</a>") } <br/><%--在页面上看到是原样:<a href='www.baidu.com'>百度</a>  --%>
        <a href="www.baidu.com">百度</a> <%--在页面上看到的是: 百度,<a>等html标签被html页面解析了 --%>
    </body>
    </html>

    至此,一个简单的自定义el函数已经说明完了,有不足的地方,希望大家多多提意见!

  • 相关阅读:
    11.7表单事件 定时器
    11.5真11.6 函数调用 数组字符串的定义和方法
    11.2 面向对象 解析
    11.1 js数据类型 作用域 原型链
    10.31js中级作用域链和this
    定时器
    生出对象的方式
    学习this
    字符串
    全局方法
  • 原文地址:https://www.cnblogs.com/nanyangke-cjz/p/7156557.html
Copyright © 2020-2023  润新知