What methods do I need to add to a custom Java class so that I can iterate over the items in one of its members? I couldn't find any specifications about how the JSTL forEach tag actually works so I'm not sure how to implement this.
For example, if I made a generic "ProjectSet" class and I woud like to use the following markup in the JSP view:
<c:forEach items="${projectset}" var="project">
...
</c:forEach>
Basic class file:
public class ProjectSet {
private ArrayList<Project> projects;
public ProjectSet() {
this.projects = new ArrayList<Project>();
}
// .. iteration methods ??
}
Is there any interface that I must implement like PHP's ArrayAccess
or Iterator
in order for this to work?
Edit: Without directly accessing the ArrayList itself, because I will likely be using some sort of Set class using generics, and the JSP view shouldn't have to know about the inner workings of the class.
The Iterable interface provides this functionality:
You can exchange the iterator logic as you need.
Unfortunately, the
forEach
tag does not supportIterable
as the items source. It does support:Collection
Iterator
Enumeration
Map
String
(relevant source code: ForEachSupport)
Of these, it's probably best to use an
Iterator
as theforEach
source when you wish to fetch items from your own class.Yes, you should implement java.util.Iterable