実行画面 †
<%@ page contentType="text/html;charset=Windows-31J" %>
<%@ taglib uri="/WEB-INF/tag.tld" prefix="myTag" %>
<html>
<head>
<title>Tag Iteration Example</title>
</head>
<body>
<% java.util.List list = new java.util.LinkedList();
list.add("壱");
list.add("弐");
list.add("参");
list.add("肆");
list.add("伍");
%>
BEFORE TAG
<hr/>
<myTag:itAttrExam colAttr="<%= list %>">
BODY <%= item %> <br/>
</myTag:itAttrExam>
<hr/>
AFTER TAG
</body>
</html>
package com.snail.sjcwc;
import java.util.Collection;
import java.util.Iterator;
import javax.servlet.jsp.JspTagException;
import javax.servlet.jsp.tagext.TagSupport;
public class TagIterationExam extends TagSupport {
private static final long serialVersionUID = 1267132930041172653L;
private Iterator iterator;
private Collection<String> colAttr;
public void setColAttr(Collection<String> param) {
// タグ属性の格納
colAttr = param;
}
public int doStartTag() throws JspTagException {
// 最初に一回だけ呼ばれる
iterator = colAttr.iterator();
if (iterator.hasNext()) {
// スクリプティング変数 item に要素一つ分を格納
pageContext.setAttribute("item", iterator.next());
return EVAL_BODY_INCLUDE;
} else {
return SKIP_BODY;
}
}
public int doAfterBody() {
// 繰り替えし数 - 1 回分呼ばれる
if (iterator.hasNext()) {
// スクリプティング変数 item に要素一つ分を格納
pageContext.setAttribute("item", iterator.next());
return EVAL_BODY_AGAIN;
} else {
// 要素が残っていない場合
return SKIP_BODY;
}
}
}
Java SJC-WC JSP#tagIteration