📄 iteratortag.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 + -