-
定义标签类,里面的方法必须是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
>
|
本文转自韩立伟 51CTO博客,原文链接:http://blog.51cto.com/hanchaohan/1576557
,如需转载请自行联系原作者