is it possible to iterate two items simultaneously

2019-02-02 11:21发布

问题:

I have two items from my model and I want to iterate them at the same using jstl foreach. how can I achieve this using a correct syntax?

回答1:

You can call varStatus.index to get the index of the current round of iteration, and then use it as a lookup for the second list.

For example, if you have two lists people.firstnames and people.lastnames you can do:

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


回答2:

I assume you have to collections that you want to iterate in one go. Add a getter which will merge these two collections and use it for the iteration. For example

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

Iteration in JSTL:

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