Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

JSTL - Using forEach to iterate over a user-defined class [duplicate]

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.

like image 264
Lotus Notes Avatar asked Jun 05 '10 00:06

Lotus Notes


1 Answers

The Iterable interface provides this functionality:

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

You can exchange the iterator logic as you need.

like image 62
Dominik Avatar answered Oct 23 '22 22:10

Dominik