Если я понимаю ваш вопрос, у вас по сути есть ArrayList of ArrayLists. JSTL имеет несколько довольно странных правил для того, что является действительной коллекцией "items". На JSTL 1.2 спецификацию не было достаточно ответа, поэтому я перешел к исходному коду.
forEach может перебирать:
- Массив нативных или типов объектов ( Примечание: сюда входят любые универсальные массивы из-за стирания типов);
- Коллекция или любой подкласс;
- Любой Итератор ;
- An Перечисление ;
- Все, что реализует Карта ; или
- Значения, разделенные запятыми, в виде String . Это устаревшее поведение.
Предостережение: использование Итераторов и Перечислений в этом контексте потенциально проблематично, так как это изменяет их состояние, и их невозможно сбросить (через JSTL).
В любом случае, код прост:
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jstl/fmt" prefix="fmt" %>
<c:forEach var="event" items="${events}">
<c:forEach var="date" items="${event}">
<fmt:formatDate value="${date}" type="both"
timeStyle="long" dateStyle="long" />
</c:forEach>
</c:forEach>
Предполагается, что объект события - это просто коллекция дат. Если эта коллекция является свойством, тогда просто замените ${event}
на ${event.dates}
или что-то еще.