自定义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函数已经说明完了,有不足的地方,希望大家多多提意见!

原文地址:https://www.cnblogs.com/nanyangke-cjz/p/7156557.html