实现 jstl标签foreach 功能

jsp 页面

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
  <%@ include file="/includes/ctx.jsp" %>
  <%@ taglib uri="/RemoveListItems" prefix="z"%>
<!DOCTYPE html >
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>角色管理</title>
</head>
<body>
	<z:for items="${rolelist}" var="z">
		<p>${z.rolename}</p>
	</z:for>
</body>
</html>

 

WEB-INF  目录下创建tld 文件

 

<?xml version="1.0" encoding="UTF-8"?>
<taglib version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"  
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee">
    <tlibversion>1.0</tlibversion>
    <jspversion>1.1</jspversion>
    <shortname>eRedLab JSPTag Library</shortname>
    <uri>/RemoveListItems</uri>
    <info>自定义标签</info>

    <tag>
        <name>for</name>
        <tagclass>com.oa.tag.Repeater</tagclass>
        <bodycontent>scriptless</bodycontent>
        <info></info>
        <attribute>
            <name>items</name>
            <required>true</required>
            <rtexprvalue>true</rtexprvalue>
        </attribute>
        <attribute>
            <name>var</name>
            <required>true</required>
            <rtexprvalue>true</rtexprvalue>
        </attribute>
        <attribute>
            <name>index</name>
            <required>false</required>
            <rtexprvalue>true</rtexprvalue>
        </attribute>
    </tag>
</taglib>

 java 类代码

 

import java.util.List; 
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;


public class Repeater extends TagSupport {
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 4086401651029717288L;
	private List<?> items;
	private String var;
	private String index;
	private int i;

	@Override
	public int doStartTag() throws JspException {
		
		if (items == null || items.size() == 0){
			return SKIP_BODY;
		}
		if(index==null)index = "";
		
		i = 0;
		if(i<items.size()){
			pageContext.setAttribute(var, items.get(i));
			pageContext.setAttribute(index, i);
		}
		
		return EVAL_BODY_INCLUDE;
	}

	@Override
	public int doAfterBody() throws JspException {
		i++;
		if(i < items.size()){
			pageContext.setAttribute(var, items.get(i));
			pageContext.setAttribute(index, i);
			return EVAL_BODY_AGAIN;
		}
		
		return SKIP_BODY;
	}

	@Override
	public int doEndTag() throws JspException {
		return EVAL_PAGE;
	}

	
	public void setItems(List<?> items) {
		this.items = items;
	}
	
	public void setVar(String var) {
		this.var = var;
	}
	
	public void setIndex(String index){
		this.index = index;
	}
	
}

  

posted @ 2016-01-06 22:13  幸福流浪  阅读(872)  评论(0编辑  收藏  举报