⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 iteratortag.java

📁 Jodd是一个开源的公用Java基础类库
💻 JAVA
字号:
package jodd.servlet.tags.basic;

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

import javax.servlet.jsp.JspTagException;
import javax.servlet.jsp.tagext.BodyContent;
import javax.servlet.jsp.tagext.BodyTagSupport;

/**
 * Collection iterator tag. Iterates a <b>collection</b>, starting from
 * <b>offset</b> and <b>length</b> number of items.
 * For every itteration, tag returns following variables:
 * <ul>
 * <li>element - current element from the collection</li>
 * <li>count - current iteration count, starting from 0</li>
 * <li>index - current iteration index in collection</li>
 * <li>total - total number of items in collection</li>
 * </ul>
 */
public class IteratorTag extends BodyTagSupport {

	public final static String ELEMENT_NAME = "element";
	public final static String COUNT_NAME = "count";
	public final static String TOTAL_NAME = "total";
	public final static String INDEX_NAME = "index";

	private Iterator iterator = null;
	private int index;
	private Integer total;
	private int count;

	public void setCollection(Collection c) {
		if (c.size() > 0) {
			iterator = c.iterator();
			total = new Integer(c.size());
		}
	}

	private int offset = 0;
	public void setOffset(int i) {
		offset = i;
	}
	
	private int lengthValue = 0;
	private String length = null;
	public void setLength(String s) {
		length = s;
	}

	private void doIterator(Iterator i) {
		pageContext.setAttribute(ELEMENT_NAME, i.next());
		pageContext.setAttribute(COUNT_NAME, new Integer(count));
		pageContext.setAttribute(TOTAL_NAME, total);
		pageContext.setAttribute(INDEX_NAME, new Integer(index));
		count++;
		index++;
		lengthValue--;
	}

	public int doStartTag() {
		if (iterator == null) {
			return SKIP_BODY;
		}
		count = 0;					// reset count
		index = 0;					// reset index

		if (length == null) {		// length parameter
			lengthValue = total.intValue();
		} else {
			lengthValue = Integer.parseInt(length);
		}
		if (lengthValue <= 0) {		// zero length
			return SKIP_BODY;
		}

		if (offset < 0) {			// offset parameter
			offset = 0;
		}
		while (offset > 0) {
			if (iterator.hasNext()) {
				iterator.next();
				offset--;
				index++;
			} else {
				return SKIP_BODY;	// offset > length
			}
		}
		if (iterator.hasNext()) {
			doIterator(iterator);
			return EVAL_BODY_AGAIN;
		} else {
			return SKIP_BODY;
		}
	}

	public int doAfterBody() throws JspTagException {
		BodyContent body = getBodyContent();
		try {
			body.writeOut(getPreviousOut());
		} catch (IOException ioe) {
			throw new JspTagException("IteratorTag: " + ioe.getMessage());
		}
		body.clearBody();

		if (lengthValue > 0) {
			if (iterator.hasNext()) {
				doIterator(iterator);
				return EVAL_BODY_AGAIN;
			}
		}
		return SKIP_BODY;
	}

	public int doEndTag() {
		return EVAL_PAGE;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -