Welche Methoden muss ich einer benutzerdefinierten Java-Klasse hinzufügen, damit ich über die Elemente in einem ihrer Member iterieren kann? Ich konnte keine Spezifikationen darüber finden, wie das JSTL forEach-Tag tatsächlich funktioniert, also bin ich mir nicht sicher, wie das zu implementieren ist.JSTL - Verwenden von forEach zum Iterieren über eine benutzerdefinierte Klasse
Zum Beispiel, wenn ich eine generische "ProjectSet" Klasse gemacht und ich woud das folgende Markup in der JSP-Ansicht verwenden möchten:
<c:forEach items="${projectset}" var="project">
...
</c:forEach>
Basisklassendatei:
public class ProjectSet {
private ArrayList<Project> projects;
public ProjectSet() {
this.projects = new ArrayList<Project>();
}
// .. iteration methods ??
}
Gibt es jede Schnittstelle, die ich wie PHP ArrayAccess
oder Iterator
implementieren muss, damit dies funktioniert?
Bearbeiten: Ohne direkten Zugriff auf die ArrayList selbst, weil ich wahrscheinlich eine Art Set-Klasse mit Generics verwenden wird, und die JSP-Ansicht sollte nicht über die inneren Funktionen der Klasse wissen müssen. Ja
Vorbehalt ist, dass JSTL forEach nicht iterable (extrem nervig) als für jeden Typ unterstützt. Also müssen Sie $ {projectSet.iterator()} tun –
Eigentlich funktioniert .iterator() nur auf dem neuesten Servlet-Container (und selbst die neueste JSTL unterstützt immer noch nicht iterierbar). Sie müssen einen Getter für den Iterator erstellen (getIterator()). –