前几天写了篇博客回顾了一下自定义标签的,这次也来重新回顾一下自定义EL函数。很多时候我们使用JSTL的同时都会使用EL表达式,而EL表达式中又有一系列的函数,比如function中的formatDate这些的,我们用得比较多的。那我们如何来自定义一个我们自己的方法,让它作为一个EL函数呢,这就是我们这次要一起来看看的东西了。
废话不多说,直接进入正题。
自定义EL函数同样也和自定义JSTL标签一样,有个基本的流程,如下:
1)定义一个类,把需要的方法写上(注意这里需要作为EL函数调用的方法必须是静态的static)。
2)标签定义文件tld
3)web.xml配置
4)JSP页面引用
基本上跟上次我们说的自定义JSTL标签一致,只是第一步不一样而已。JSTL中是继承那几个TagSupport的类,而这里不用继承,随便即可。
下面开始我们的代码了。
1)定义一个处理类:
package com.shun.customel;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateFormatter {
public static String formatDate(Date date,String pattern){
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
return sdf.format(date);
}
}
这个方法很简单,只是通过指定的格式格式化一下日期而已。
2)定义tld文件,这个文件与之前的JSTL标签文件有点不一样:
<?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/web-jsptaglibrary_2_0.xsd"
version="2.0">
<description>A tag library exercising SimpleTag handlers.</description>
<tlib-version>1.0</tlib-version>
<uri>http://shun.com/myElFuns</uri>
<function>
<name>formatDate</name>
<function-class>com.shun.customel.DateFormatter</function-class>
<function-signature>java.lang.String formatDate(java.util.Date,java.lang.String)</function-signature>
</function>
</taglib>
我们这里只定义了一下函数,
name是函数的名称,是我们在JSP页面上调用的函数名;
function-class是处理这个函数的类,必须要写完全的包名;
而function-signature就是函数签名了,这里注意,除了基本类型(int,char等,String除外)外,都必须写完全的类名,包括包名,参数也一样。
当然,一个文件可以定义很多个函数,当有多个函数需要定义时,写多个function即可。
3)写完了标签定义文件,接下来当然就是web.xml了。
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<jsp-config>
<taglib>
<taglib-uri>http://shun.com/myElFuns</taglib-uri>
<taglib-location>/META-INF/elFuns.tld</taglib-location>
</taglib>
</jsp-config>
</web-app>
这里跟我们上次说的一样,taglib-uri必须和之前在tld文件中定义的uri一样,而taglib-location指定了tld文件的位置。
4)前面三步做完,我们的EL自定义函数已经完成了,接下来就是使用了。但在这之前,由于我们在formatDate中需要一个Date类型的变量,而且我们的EL表达式中无法用JSP脚本,这时怎么办呢?当然,我们可以把这个参数设到request里面去。如下JSP:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.util.Date" %>
<%@ taglib uri="http://shun.com/myElFuns" prefix="myElFuns"%>
<!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>Insert title here</title>
</head>
<body>
<%request.setAttribute("date", new Date()); %>
FormatDate:${myElFuns:formatDate(date,"yyyy-MM-dd") }
</body>
</html>
我们直接在页面上设值。
当然,我们认为这样在页面写JSP脚本不大美观的话,可以通过servlet来设值,然后直接取出,servlet中还是只是一句代码:
request.setAttribute("date", new Date());
然后直接进行转发即可。
EL表达式对于有参数的处理相对JSTL标签来说要简单得多。但JSTL标签可以带EL表达作为属性的值,或者JSP脚本,这些是EL表达式无法做到的。这些都需要我们在项目中进行权衡。
好了,自定义标签就到这里。
分享到:
相关推荐
jstl自定义标签和函数思维导图
主要介绍了JavaWeb开发之JSTL标签库的使用、 自定义EL函数、自定义标签(带属性的、带标签体的),需要的朋友可以参考下
从JSTL和STRUTS的TLD文件到自定义EL函数,自己整理的关于jstl和struts标签的使用方法,以及el函数的建立等
做过大型网站前台的Web开发程序员最头疼的事情就是前台首页的布局,这其中最最头疼的就是标题字符的截取的问题,虽然有fn:substring,但表现率...在我们老大的指点下,了解了如何自定义EL函数,哈哈,今天实现了它。
模糊查:关键字加红色((用el自定义函数给关键字加颜色的方法[作用:直接用于jsp页面输出]
演示了如何操作cookie,如何自定义标签,如何定义EL内部函数,然后综合演示了怎么定义一个自定义分页标签,可自己进行扩展
自定义标记的自定义标签的自定义标签连接的回调函数JavaScript和自定义标记的自定义标记CmEt(CustomElement)库多使用的自定义标记的自定义标签的自动标记的标签礼仪编辑 Para editar esta etiqueta le asignamos ...
完整版Java web开发教程PPT课件 Java开发进阶教程 第10章 过滤器、监听器、自定义标签(共19页).pptx 完整版Java web开发教程PPT课件 Java开发进阶教程 第11章 AJAX实现(共11页).pptx 完整版Java web开发教程PPT...
在标签中加入@close=’closeDialog’ mothods中加入 //关闭弹框的事件 closeDialog(){ this.xxx = '';//清空数据 }, 以上这篇element ui 对话框el-dialog关闭事件详解就是小编分享给大家的全部内容了,希望能给...
用过Element ui库的童鞋肯定知道<el>组件,简单、好用、可以自定义标签页,不知道广大童鞋们在刚开始使用<el>组件的时候有没有想过它是如何实现的?我咋刚开始使用<el>组件的时候就有去想过,也想去实现一个超级简单...
完整版Java web开发教程PPT课件 Java开发进阶教程 第10章 过滤器、监听器、自定义标签(共19页).pptx 完整版Java web开发教程PPT课件 Java开发进阶教程 第11章 AJAX实现(共11页).pptx 完整版Java web开发教程PPT...
完整版Java web开发教程PPT课件 Java开发进阶教程 第10章 过滤器、监听器、自定义标签(共19页).pptx 完整版Java web开发教程PPT课件 Java开发进阶教程 第11章 AJAX实现(共11页).pptx 完整版Java web开发教程PPT...
完整版Java web开发教程PPT课件 Java开发进阶教程 第10章 过滤器、监听器、自定义标签(共19页).pptx 完整版Java web开发教程PPT课件 Java开发进阶教程 第11章 AJAX实现(共11页).pptx 完整版Java web开发教程PPT...
完整版Java web开发教程PPT课件 Java开发进阶教程 第10章 过滤器、监听器、自定义标签(共19页).pptx 完整版Java web开发教程PPT课件 Java开发进阶教程 第11章 AJAX实现(共11页).pptx 完整版Java web开发教程PPT...
完整版Java web开发教程PPT课件 Java开发进阶教程 第10章 过滤器、监听器、自定义标签(共19页).pptx 完整版Java web开发教程PPT课件 Java开发进阶教程 第11章 AJAX实现(共11页).pptx 完整版Java web开发教程PPT...
内容包括JSP与Web技术概论、初探JSP、Java与JSP、JSP程序设计基础、JSP内建对象、表单与交互式网页、JSTL与标签函数库、EL、灵活设计JSP网页、文件I/O技术、Java Mail与联机邮件、JSP与XML、JDBC与数据库系统、数据...
以select为例,如果select写在循环里,触发change事件时可能不只需要传递被选中项的值,还要传递index过去,来改变同一循环中的其他标签的状态。 下面这样写是无效的: @change=changeStatus(val, index) (item,...
- -- 渲染内容自定义数据项渲染函数功能(h,选项) -- -- 禁用所有局部全部选项布尔型-- 错误的showOverflow工具提示当内容过长被隐藏时显示tooltip 布尔型-- 错误的代码示例 < ec-group-transfer v-model =" ...
采用模板技术,程序与模板分离,后台新建标签,标签插入到模板中就可以了,采用了无限扩展的思路,满足网站设计们,在HTML模板中你也可以写进ASP代码,后台可以新建ASP函数,在到ASP模板中调用,模块字段也可以自定义增加和...
完整版Java web开发教程PPT课件 Java开发进阶教程 第10章 过滤器、监听器、自定义标签(共19页).pptx 完整版Java web开发教程PPT课件 Java开发进阶教程 第11章 AJAX实现(共11页).pptx 完整版Java web开发教程PPT...