2010-06-05 20 views
6

Jakie metody należy dodać do niestandardowej klasy Java, aby można było iterować po elementach jednego z jej członków? Nie mogłem znaleźć żadnych specyfikacji dotyczących działania znacznika JSTL forEach, więc nie jestem pewien, jak to zaimplementować.JSTL - Używanie forEach do iterowania po klasie zdefiniowanej przez użytkownika

Na przykład, jeśli zrobiłem rodzajowe "ProjectSet" klasę i woud Lubię używać poniższego znaczników w widoku JSP:

<c:forEach items="${projectset}" var="project"> 
... 
</c:forEach> 

Podstawowe plik klasy:

public class ProjectSet { 
    private ArrayList<Project> projects; 
    public ProjectSet() { 
     this.projects = new ArrayList<Project>(); 
    } 
    // .. iteration methods ?? 
} 

Czy istnieje każdy interfejs, który muszę wdrożyć, jak PHP ArrayAccess lub Iterator, aby to zadziałało?

Edycja: Bez bezpośredniego dostępu do samej tablicy ArrayList, ponieważ prawdopodobnie będę używał jakiejś klasy Set przy użyciu generycznych, a widok JSP nie powinien wiedzieć o wewnętrznych działaniach klasy.

Odpowiedz

5

iterowalny interfejs zapewnia tę funkcję:

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(); 
    } 
} 

można wymieniać logikę iterator, jak trzeba.

+9

Utrata tego jest taka, że ​​JSTL forEach nie obsługuje iteracji (bardzo irytującej) jako forEach type. Musisz więc wykonać $ {projectSet.iterator()} –

+2

W rzeczywistości .iterator() będzie działał tylko na najnowszym Servlet Container (a nawet najnowszy JSTL nadal nie obsługuje iteracji). Będziesz musiał zrobić getter dla iteratora (getIterator()). –

Powiązane problemy