JSTL - Uso de forEach para iterar sobre una clase definida por el usuario [duplicado]

Esta pregunta ya tiene una respuesta aquí:

javax.servlet.ServletException: javax.servlet.jsp.JspTagException: No sé cómo iterar sobre los "elementos" suministrados en <forEach> 3 respuestas

¿Qué métodos necesito agregar a una clase Java personalizada para poder iterar sobre los elementos en uno de sus miembros? No pude encontrar ninguna especificación sobre cómo funciona realmente la etiqueta JSTL forEach, así que no estoy seguro de cómo implementar esto.

Por ejemplo, si hice una clase genérica "ProjectSet" y me gustaría usar el siguiente marcado en la vista JSP:

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

Archivo de clase básica:

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

¿Hay alguna interfaz que deba implementar como @ PHArrayAccess oIterator para que esto funcione?

Edit: Sin acceder directamente a la ArrayList, porque probablemente usaré algún tipo de clase Set usando genéricos, y la vista JSP no debería tener que saber sobre el funcionamiento interno de la clase.

Respuestas a la pregunta(3)

Su respuesta a la pregunta