public class
WithCollectionTag extends BodyTagSupport { private Object element =
null;
private Collection list = null;
private Iterator
iterator = null;
public Object getElement() { return
element; }
public void setProperty(String property) throws
JspException { //取得父Tag对象,并且得到Collection WithObjectTag parent =
(WithObjectTag) getParent(); if (parent == null) throw new
JspException("parent tag is null"); try { Object
propertyValue =
PropertyUtils.getProperty(parent.getValue(),property); this.list =
(Collection) propertyValue; if (list == null) throw new
JspException("Collection is null"); } catch (Exception e)
{ throw new JspException(e); } }
public int
doStartTag() throws JspException { //设置第一个元素,然后执行子Tag iterator =
list.iterator(); if (iterator.hasNext()) element =
iterator.next(); return EVAL_BODY_INCLUDE; }
public int
doAfterBody() { if (iterator.hasNext())
{ //如果还存在子元素,设置子元素,并且再次执行子Tag //循环由此而来 //否则不再执行子Tag element
= iterator.next(); return
EVAL_BODY_AGAIN; } else return
EVAL_PAGE; } } 编写 ElementOutputTag