javaweb之自定义标签库——迭代标签(foreach)(可迭代Map、List、Set、任意数组)

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/example" prefix="c" %>



  
    开发迭代标签(foreach)(重复执行标签体案例)
  
  
  
  	<%--模拟servlet的代码 --%>
  	<%
  		List list = new ArrayList();
  		list.add("aaa");
  		list.add("bbb");
  		list.add("ccc");
  		request.setAttribute("list", list);
  	%>
  	
  	
  		${str}


<%--模拟servlet的代码 --%> <% Map map = new LinkedHashMap(); map.put("aa", "111"); map.put("bb", "222"); map.put("cc", "333"); request.setAttribute("map", map); %> ${entry.key} = ${entry.value }


<%--模拟servlet的代码 --%> <% Integer[] num = {1,2,3}; request.setAttribute("num", num); %> ${i}


<%--模拟servlet的代码 --%> <% int[] arr = {1,2,3}; request.setAttribute("arr", arr); %> ${i}


<%--模拟servlet的代码 --%> <% boolean[] b = {true,false,true}; request.setAttribute("b", b); %> ${i}
package cn.itcast.web.tag.example;

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.Map;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.SimpleTagSupport;

//开发迭代标签(foreach)
//不管是双列集合还是数组还是单列集合,全部都转成单列集合进行迭代
public class ForeachTag2 extends SimpleTagSupport {
	// 因为传进来的可能是List也可能是Map也可能是数组,所以用Object类型
	private Object items;
	//var的类型要是String因为他是迭代的关键字,存入pageContext中的key
	private String var;
	
	private Collection collection;
	public void setItems(Object items) {
		this.items = items;
		//在传入集合的时候首先判断是不是Collection、Map、数组,全都转成单列集合存入collection变量中
		if(items instanceof Collection) { //list set
			collection = (Collection) items;
		}
		if(items instanceof Map) { 
			Map map  = (Map) items;
			collection = map.entrySet();
		}
		//后面的全都是数组判断,太多了,用反射简化
		//通过Array就可以对任意数组进行操作
		if(items.getClass().isArray()) {//判断是不是数组
			this.collection = new ArrayList();
			//得到数组长度用反射包中的Array类
			int length = Array.getLength(items);
			//迭代数组
			for(int i=0;i




    A tag library exercising SimpleTag handlers.
    1.0
    example
    /example
    
    
    
        referer
        cn.itcast.web.tag.example.RefererTag
        empty
        
        	site
        	true
        	true
        
        
        
        	page
        	true
        	true
        
    
    
    
        if
        cn.itcast.web.tag.example.IfTag
        scriptless
        
        	test
        	true
        	true
        
    
    
    
        choose
        cn.itcast.web.tag.example.ChooseTag
        scriptless
    
    
    
        when
        cn.itcast.web.tag.example.WhenTag
        scriptless
        
        	test
        	true
        	true
        
    
    
     
        otherwise
        cn.itcast.web.tag.example.OtherWiseTag
        scriptless
    
    
    
        foreach
        cn.itcast.web.tag.example.ForeachTag
        scriptless
        
        	items
        	true
        	true
        
        
         
        	var
        	true
        	false
        
    
    
     
        foreach2
        cn.itcast.web.tag.example.ForeachTag2
        scriptless
        
        	items
        	true
        	true
        
        
         
        	var
        	true
        	false
        
    
   


你可能感兴趣的:(自己用)