2010-06-05 2 views
6

구성원 중 하나의 항목을 반복 할 수 있도록 사용자 정의 Java 클래스에 어떤 메소드를 추가해야합니까? JSTL forEach 태그가 실제로 어떻게 작동하는지에 대한 사양을 찾을 수 없으므로이를 구현하는 방법을 모르겠습니다. 나는 일반적인 "ProjectSet"클래스를 만들어 내가 JSP보기에서 다음과 같은 마크 업을 사용하려면 woud 예를 들어JSTL - forEach를 사용하여 사용자 정의 클래스를 반복 수행

:

<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과 같이 구현해야하는 인터페이스가 필요합니까?

편집 : 제네릭을 사용하는 일종의 Set 클래스를 사용하고 있기 때문에 ArrayList 자체에 직접 액세스하지 않고도 JSP 뷰는 클래스의 내부 동작에 대해 알 필요가 없습니다.

답변

5

구현해야합니다 : 당신이 필요로

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는 각 유형에 대해 iterach (매우 귀찮음)를 지원하지 않는다는 점에주의하십시오. $ {projectSet.iterator()} –

+2

사실 .iterator()는 최신 서블릿 컨테이너에서만 작동하며 (심지어 최신 JSTL도 여전히 iterable을 지원하지 않습니다). 이터레이터 (getIterator())에 대한 getter를 만들어야합니다. –

관련 문제