2010-06-05 28 views
6

需要將哪些方法添加到自定義Java類中,以便可以迭代其中一個成員的項目?我找不到任何關於JSTL forEach標籤實際工作的規範,所以我不知道如何實現這一點。JSTL - 使用forEach遍歷用戶定義的類

例如,如果我犯了一個通用的「ProjectSet」級和我woud喜歡用下面的標記在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的ArrayAccessIterator爲了這個工作?

編輯:沒有直接訪問ArrayList本身,因爲我可能會使用某種使用泛型的Set類,並且JSP視圖不應該知道類的內部工作方式。

回答

5

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

因爲您可以根據需要交換迭代邏輯。

+9

請注意,對於每個類型,JSTL forEach不支持iterable(非常煩人)。所以你需要做$ {projectSet.iterator()} – 2011-02-13 15:16:36

+2

實際上.iterator()只能在最新的Servlet容器上工作(甚至最新的JSTL仍然不支持迭代)。您將需要爲迭代器(getIterator())創建一個getter。 – 2011-02-14 00:29:35