EL和自定义函数库
问题:在数据显示的时候经常需要调用一些方法对需要显示的数据进行基本的处理,如:
数据过滤、求子串等操作。那么就需要使用EL表达式进行快速的函数调用。
- 引入HTMLFilter.java类
- 描述为函数
2.1 在WEB-INF中创建一个myfun.tld文件
1 <?xml version="1.0" encoding="UTF-8"?> 2 <taglib xmlns="http://java.sun.com/xml/ns/j2ee" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd" 5 version="2.0"> 6 <tlib-version>1.0</tlib-version> 7 <short-name>jnb</short-name> 8 <function> 9 <name>filter</name> 10 <function-class>cn.itcast.utils.HTMLFilter</function-class> 11 <function-signature>java.lang.String filter(java.lang.String)</function-signature> 12 </function> 13 </taglib>
类 cn.itcast.utils.HTMLFilter
1 public final class HTMLFilter { 2 public static String filter(String message) { 3 if (message == null) 4 return (null); 5 char content[] = new char[message.length()]; 6 message.getChars(0, message.length(), content, 0); 7 StringBuffer result = new StringBuffer(content.length + 50); 8 for (int i = 0; i < content.length; i++) { 9 switch (content[i]) { 10 case '<': 11 result.append("<"); 12 break; 13 case '>': 14 result.append(">"); 15 break; 16 case '&': 17 result.append("&"); 18 break; 19 case '"': 20 result.append("""); 21 break; 22 default: 23 result.append(content[i]); 24 } 25 } 26 return (result.toString()); 27 28 } 29 }
1.2 引入函数库
%@taglib uri="/WEB-INF/myfuns.tld" prefix="jnb"%
1.3 使用EL调用函数
<td>${jnb:filter(entry.value.info)}</td>
注意:
- EL表达式中不能继续嵌套EL表达式
- 定义函数的时候函数必须是静态的。