此标签和sun公司的一样可以迭代Map,List,数组
jsp文件为
<%@page import="java.util.*"%> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="/simple" prefix="c"%> <!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>foreach tag</title> </head> <body> <% List list = new ArrayList(); list.add("aaa"); list.add("bbb"); list.add("ccc"); request.setAttribute("list", list); %> <c:foreach var="str" items="${list}"> ${str } </c:foreach> <br>------------------------------<br> <% Map map = new HashMap(); map.put("aa", "111"); map.put("bb", "222"); map.put("aa", "333"); request.setAttribute("map", map); %> <c:foreach var="entry" items="${map }"> ${entry.key } = ${entry.value } </c:foreach> <br>------------------------------<br> <% Integer num[] = {1,2,3,4}; request.setAttribute("num", num); %> <c:foreach var="i" items="${num }"> ${i } </c:foreach> <br>------------------------------<br> <% int arr[] = {1,2,3,4}; request.setAttribute("arr", arr); %> <c:foreach var="i" items="${arr }"> ${i } </c:foreach> </body> </html>
标签处理器为
package cn.itcast.web.tag; import java.io.IOException; import java.lang.reflect.Array; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Iterator; import java.util.List; import java.util.Map; import javax.servlet.jsp.JspException; import javax.servlet.jsp.tagext.SimpleTagSupport; //开发foreach标签 public class ForeachTag extends SimpleTagSupport { private Object items; private String var; //单列或双列集合存储至此 private Collection collection; public void setItems(Object items) { this.items = items; //将map转为单列集合 if(items instanceof Map){ Map map = (Map) items; collection = map.entrySet(); } if(items instanceof Collection){ collection = (List) items; } //统一对数组进行处理 if(items.getClass().isArray()){ this.collection = new ArrayList(); int length = Array.getLength(items); for(int i=0; i<length; i++){ Object value = Array.get(items, i); collection.add(value); } } /*if(items instanceof Object[]){ Object[] obj = (Object[]) items; collection = Arrays.asList(obj); //此方法接受一个对象 }*/ } public void setVar(String var) { this.var = var; } @Override public void doTag() throws JspException, IOException { Iterator it = collection.iterator(); while(it.hasNext()){ Object obj = it.next(); //对象存在域中 this.getJspContext().setAttribute(var, obj); //标签执行 this.getJspBody().invoke(null); } } }
要记得在tld中对标签描述
<tag> <name>foreach</name> <tag-class>cn.itcast.web.tag.ForeachTag</tag-class> <body-content>scriptless</body-content> <attribute> <name>var</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>items</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> </tag>