目录
一:简单了解自定义EL标签的方法
第一件需要了解的事情是如果想要自定义EL标签就需要实现JspTag接口,而这个接口有两个继承接口SimpleTag和Tag。
这两个接口有什么不同呢?SimpleTag顾名思义,简单标签。相对于Tag接口,SImpleTag接口仅提供一个doTag()方法对标签进行处理从而避免繁琐,而Tag接口则提供了更加细致的方法来处理标签,例如:doEndTag()和doEndTag()。所以,在这里我选择更简单的接口SimpleTag进行EL标签的自定义。不过,Java的维护者对我们程序员是细心的,因为他们已经提供了一个SimpleTag的实现类SimpleTagSupport,这个类不但帮我们实现了接口,而且还扩展了两个实用的GET方法是我们可以更加灵活方便的控制EL标签的业务处理。
二:提出合理的EL标签需求并创建对应的标签处理器
1.提出需求
定义一个标签从而可以遍历List、Map、Set、引用数组、基础类型数组
2.设计标签
一般标签的格式是:<tld前缀[短名]:标签名 属性1=“值” [...]></tld前缀[短名]>
当然单标签(不带实体的)和双标签(带实体的)格式仅仅是标签封口(/)位置的不同而已,那么我们根据需求设计的标签格式可以是下面这个样子:
<!--myTag是自定义前缀名或者是短名,可以在tld中任意修改
items属性用来存放需要遍历的数据集
var用来回显输出我们需要的结果,在业务处理中起到索引和标记的作用,后面会有写到
-->
<myTag:ForEach items="" var=""></myTag:ForEach>
3.设计这个标签的处理器
上面已经提到过了,想让这个标签变的有用,就需要创建一个与之对应的类并实现SimpleTagSupport类,以下是类的实现:
package com.niu;
import java.io.IOException;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.SimpleTagSupport;
//类名是可以随意起的,这个类名和标签名不是一个名字。
public class ForEachTag extends SimpleTagSupport {
//这里的属性名必须和标签内的属性名保持一致,必须严格匹配大小写。
//在处理业务时,标签内的属性值会通过相应的set访问器来设置标签处理器内相对应的属性值。
//例如:标签内var="v",那么这处理器内var的值也会是"v"。
private Object items;
private String var;
public void setItems(Object items) {
this.items = items;
}
pu