我需要向自定义Java类添加什么方法,以便可以迭代其成员之一中的项目?我找不到有关JSTL forEach标记实际工作方式的任何规范,所以我不确定如何实现这一点。
例如,如果我创建了一个通用的“ ProjectSet”类,并且希望在JSP视图中使用以下标记:
<c:forEach items="${projectset}" var="project"> ... </c:forEach>
基本类文件:
public class ProjectSet { private ArrayList<Project> projects; public ProjectSet() { this.projects = new ArrayList<Project>(); } // .. iteration methods ?? }
有没有我必须实现的接口(如PHP的接口)ArrayAccess或Iterator使之正常工作的接口?
ArrayAccess
Iterator
编辑:在不直接访问ArrayList本身的情况下,因为我可能会使用泛型使用某种Set类,并且JSP视图不必知道该类的内部工作原理。
Iterable接口提供此功能:
public class ProjectSet implements Iterable<Project> { private ArrayList<Project> projects; public ProjectSet() { this.projects = new ArrayList<Project>(); } // .. iteration methods ?? @Override public Iterator<Project> iterator() { return projects.iterator(); } }
您可以根据需要交换迭代器逻辑。