我需要将哪些方法添加到自定义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
才能实现此功能?
编辑:没有直接访问ArrayList本身,因为我可能会使用泛型使用某种Set类,而JSP视图不应该知道类的内部工作。
答案 0 :(得分:4)
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();
}
}
您可以根据需要更换迭代器逻辑。
答案 1 :(得分:0)
是的,您应该实施java.util.Iterable
答案 2 :(得分:0)
很遗憾,forEach
标签不支持Iterable
作为商品来源。它确实支持:
Collection
Iterator
Enumeration
Map
String
中给出的逗号分隔值列表(相关源代码:ForEachSupport)
其中,当您希望从自己的类中获取项目时,最好使用Iterator
作为forEach
的来源。