Возможно ли повторять итерацию двух элементов одновременно с помощью foreach в jstl?

У меня есть два элемента из моей модели, и я хочу их повторить с помощью jstl foreach. как я могу достичь этого, используя правильный синтаксис?

Ответы

Ответ 1

Вы можете вызвать varStatus.index, чтобы получить индекс текущего раунда итерации, а затем использовать его для поиска второго списка.

Например, если у вас есть два списка people.firstnames и people.lastnames, вы можете сделать:

<c:forEach var="p" items="${people.firstnames}" varStatus="status">
  <tr>
      <td>${p}</td>
      <td>${people.lastnames[status.index]}</td>
  </tr>
</c:forEach>

Ответ 2

Я предполагаю, что у вас есть коллекции, которые вы хотите перебирать за один раз. Добавьте геттер, который объединит эти две коллекции и будет использовать его для итерации. Например

private Collection<String> first;
private Collection<String> second;

public Collection<String> getBoth()
{
  List<String> result = new ArrayList<String>();
  result.addAll(first);
  result.addAll(second);
  return result;
}

Итерация в JSTL:

<c:forEach var="p" items="${people.both}">
  <tr>
      <td>${p}</td>
  </tr>
</c:forEach>