-
定义标签类,里面的方法必须是static静态的方法:
- 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
package
com.hanchao.el;
import
java.text.SimpleDateFormat;
import
java.util.Date;
import
com.hanchao.entity.User;
/**
* 自定义EL表达式
* 注意事项:方法必须是static的静态方法
* @author liweihan (liweihan@sohu-inc.com)
* @version 1.0 (2014年11月14日 下午2:20:57)
*/
public
class
MyElTag {
/**
* 用来验证用户名是否为admin
* [仅仅是测试,无意义]
* @param user 实体类User
* @return
*
* 2014年11月14日 下午2:27:14
* liweihan
*/
public
static
boolean
checkUsername(User user) {
if
(user.getName().equals(
"admin"
)) {
return
true
;
}
return
false
;
}
/**
* 字符串反转
* @param str 需要反转的字符串
* @return
*
* 2014年11月14日 下午2:30:00
* liweihan
*/
public
static
String reverse(String str) {
return
new
StringBuffer(str).reverse().toString();
}
/**
* 返回字符串去掉前后空格的字符长度
* @param str
* @return
*
* 2014年11月14日 下午2:31:17
* liweihan
*/
public
static
int
countStr(String str) {
return
str.trim().length();
}
/**
* 格式化日期
* @param date 日期
* @param pattern 格式
* @return
*
* 2014年11月14日 下午3:33:33
* liweihan
*/
public
static
String formatTime(Date date ,String pattern) {
SimpleDateFormat simpleDateFormat =
new
SimpleDateFormat(pattern);
return
simpleDateFormat.format(date);
}
}
- 1
在WEB-INF下面建立一个tld文件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | <? 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" > <!-- 定义函数的版本 --> < tlib-version >1.0</ tlib-version > < short-name >el</ short-name > <!-- 定义函数的名称 → <short-name>myel</short-name> --> < uri >http://so.tv.sohu.com/custom/functions</ uri > <!-- 定义顶一个函数 --> < function > <!-- 函数描述 --> < description >check isOrNot admin</ description > <!-- 函数名 → 注意:此处的名字和JSP页面上名字一样! <name>checkUsername</name> --> < name >check</ name > <!-- 定义函数处理类 --> < function-class >com.hanchao.el.MyElTag</ function-class > <!-- 函数参数说明 --> < function-signature > boolean checkUsername(com.hanchao.entity.User) </ function-signature > <!-- 例子 --> < example >${el:check(user)}</ example > </ function > <!-- 反转一个字符串 --> < function > < description >reverse a String</ description > < name >reverse</ name > < function-class >com.hanchao.el.MyElTag</ function-class > < function-signature > java.lang.String reverse(java.lang.String) </ function-signature > </ function > <!-- 去掉前后空格后返回一个字符串的长度 --> < function > < description >get a String'length</ description > < name >len</ name > < function-class >com.hanchao.el.MyElTag</ function-class > < function-signature > java.lang.Integer countStr(java.lang.String) </ function-signature > </ function > <!-- 格式化日期 --> < function > < description >formate date or time</ description > < name >format</ name > < function-class >com.hanchao.el.MyElTag</ function-class > < function-signature > java.lang.String formatTime(java.util.Date,java.lang.String) </ function-signature > </ function > </ taglib > |
4.在web.xml中加入jsp-fig的配置
1 2 3 4 5 6 7 8 9 10 | <!-- 自定义EL表达式 --> < jsp-config > < taglib > <!-- 定义标签的引用地址,JSP页面时会用到 , 和tld文件的地址保持一致!但是tld文件中可以省略不写--> < taglib-uri >/myeltag</ taglib-uri > <!-- 配置标签的TLD文件地址 --> < taglib-location >/WEB-INF/myel.tld</ taglib-location > </ taglib > </ jsp-config > |
5.JSP页面中使用:注意事项如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="com.hanchao.entity.User" %> <%@ page import="java.util.Date" %> <%@ taglib uri="/myeltag" prefix="m"%> <!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 > < h1 >EL表达式的简单学习</ h1 > <% User user = new User(); user.setName("admin1"); request.setAttribute("user", user); pageContext.setAttribute("name"," 123456"); application.setAttribute("date", new Date()); %> <%-- 注意事项: 1.checkUsername的值来源于tld文件的fucntion标签下的name的值!! 2.myel的值与tld文件的short-name标签里面的值貌似关系不大! 我们只需要在引入时定义prefix="xx",使用时${xx:} ${myel:checkUsername(user) } --%> ${m:check(user) } < hr /> ${m:reverse(name) } < hr /> ${m:len(name) } < hr /> ${m:format(date,"yyyy-MM-dd") } <%-- 参考文章: http://954151190.iteye.com/blog/626727 http://blog.sina.com.cn/s/blog_780a632b0100wrnq.html --%> </ body > </ html > |