javaweb之自定义标签库——简单的foreach标签(对List迭代)

<%@ 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}
package cn.itcast.web.tag.example;

import java.io.IOException;
import java.util.Iterator;
import java.util.List;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.SimpleTagSupport;
//开发迭代标签(foreach)
public class ForeachTag extends SimpleTagSupport {
	//因为传进来的可能是List也可能是Map也可能是数组,所以用Object类型
	private Object items;
	//不知道集合中存的是什么,但是var的类型要是String因为他是迭代的关键字,存入pageContext中的key
	private String var;
	
	public void setItems(Object items) {
		this.items = items;
	}
	public void setVar(String var) {
		this.var = var;
	}
	
	@Override
	public void doTag() throws JspException, IOException {
		//迭代标签
		List list = (List) items;
		Iterator it =  list.iterator();
		while(it.hasNext()) {
			//不知道List中存的是什么东西,所以要用Object
			Object value = it.next();
			//取到一个东西就把它存入pageContext中,以var为关键字来存
			this.getJspContext().setAttribute(var, value);
			//存入域中就通知标签体执行
			//执行标签体就会把存入的东西拿走!
			this.getJspBody().invoke(null);
			//下次循环就会把上次存的东西覆盖,再拿出来
			
			/*
			 	这两行代码特别巧可以在页面中用EL表达式拿到循环的值
				this.getJspContext().setAttribute(var, value);
				this.getJspBody().invoke(null);
			*/
		}
	}
	
}




    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
        
    
   


你可能感兴趣的:(javaweb之自定义标签库——简单的foreach标签(对List迭代))