JSTL - Использование forEach для итерации по определенному пользователем классу [duplicate]

На этот вопрос уже есть ответ:

javax.servlet.ServletException: javax.servlet.jsp.JspTagException: не знаю, как перебирать предоставленные «элементы» в <forEach> 3 ответа

Какие методы мне нужно добавить в пользовательский класс Java, чтобы я мог перебирать элементы одного из его членов? Я не смог найти каких-либо спецификаций о том, как на самом деле работает тег JSTL forEach, поэтому я не уверен, как это реализовать.

Например, если я создал общий класс ProjectSet и мне хотелось бы использовать следующую разметку в представлении 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 ??
}

Есть ли какой-нибудь интерфейс, который я должен реализовать как PHPArrayAccess илиIterator чтобы это сработало?

Редактировать: без непосредственного доступа к самому ArrayList, потому что я, скорее всего, буду использовать какой-то класс Set с использованием обобщенных типов, и представление JSP не должно знать о внутренней работе класса.