在JSP中,规范简化了标签库的开发,在JSP2中开发自定义标签只需如下三个步骤:
一、开发自定义标签处理类
二、建立一个*.tld文件
三、在JSP文件中使用自定义标签
自定义标签类应该继承一个父类:javax.servlet.jsp.tagext.SimpleTagSupport,除此之外,JSP自定义标签类还有如下要求:
一、如果标签类包含属性,每个属性都需要提供对应的getter和setter方法
二、重写doTag()方法,这个方法负责生成页面内容
下面开始标签的开发:
一、开发自定义标签处理类 ForeachTag,实现迭代List集合,数组的功能
public class ForeachTag extends SimpleTagSupport {
// 标签属性
private String items;
private String var;
//这里省略 getter setter方法
@Override
public void doTag() throws JspException, IOException {
Iterator ite = null;
Object tempItem = getJspContext().getAttribute(items);
// 如果是集合
if (tempItem instanceof Collection) {
ite = ((Collection) tempItem).iterator();
}
// 如果是数组
else if (tempItem instanceof Object[]) {
ite = Arrays.asList((Object[]) tempItem).iterator();
} else {
throw new RuntimeException("不能转换");
}
// 进行迭代
while (ite.hasNext()) {
Object obj = ite.next();
getJspContext().setAttribute(var, obj);
//输出标签体
getJspBody().invoke(null);
}
}
}
二、开发*.tld文件。在web-inf目录下新建mytaglib.tld文件,内容如下:
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">
this is my tag library Definition
1.0
mytaglib
http://127.0.0.0/servlet/mytaglib
foreach
taglib.ForeachTag
scriptless
items
true
true
var
true
true
三、开发JSP,并在JSP中使用自定义的标签实现list集合的迭代
List lists=new ArrayList();
lists.add("疯狂Java讲义");
lists.add("轻量级JavaEE企业级应用");
lists.add("疯狂Ajax讲义");
pageContext.setAttribute("lists",lists);
String[] ary=new String[3];
ary[0]="A";
ary[1]="B";
ary[2]="C";
pageContext.setAttribute("ary",ary);
%>
自定义标签-仿foreach标签 功能:循环List集合,一维数组这里迭代的是集合
${item } |
这里迭代的是数组
${item }
JSP文件中需注意的问题:使用导入自定义开发的标签,uri路径与mytaglib.tld文件中指定的uri路径相同