您可以實現自己的JSP標籤Java,所以你可以寫一個接受一個Iterable
標籤,然後使用相同的方式,你會使用JSTL forEach
標籤。
本文檔舉例說明了如何創建自定義標籤來迭代通過任意自定義對象 - 您的實現可能會更簡單。關鍵是要返回EVAL_BODY_AGAIN
以允許您多次處理標籤的主體。
http://java.sun.com/j2ee/tutorial/1_3-fcs/doc/JSPTags6.html#68297
我還沒有試過運行此,但它可能是入手:
public class IterableForEachTag extends BodyTagSupport {
private static final long serialVersionUID = 1L;
private Iterable<?> iterable = null;
private Iterator<?> iterator = null;
private String var = null;
public int doStartTag() throws JspException {
if (iterator == null) {
iterator = iterable.iterator();
}
if (iterator.hasNext()) {
Object element = iterator.next();
pageContext.setAttribute(var, element);
return (EVAL_BODY_AGAIN);
} else
return (SKIP_BODY);
}
public int doAfterBody() throws JspException {
if (bodyContent != null) {
try {
JspWriter out = getPreviousOut();
out.print(bodyContent.getString());
bodyContent.clearBody();
} catch (IOException e) {
throw new JspException(e);
}
}
if (iterator.hasNext()) {
Object element = iterator.next();
pageContext.setAttribute(var, element);
return (EVAL_BODY_AGAIN);
} else {
return (SKIP_BODY);
}
}
public void setIterable(Iterable i) {
iterable = i;
iterator = null;
}
public void setVar(String v) {
var = v;
}
}
你不能在你的jsp頁面的腳本里面使用iterable.iterator()嗎? – MLS 2011-06-02 09:40:11
我寧願避免scriptlet,但無論如何,它是一個快速簡單的解決方案。 – 2011-06-08 10:52:18