J'ai réussi à le faire avec le code suivant mais il doit y avoir un moyen plus simple.
<%@ taglib prefix="c" uri="http://Java.Sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://Java.Sun.com/jsp/jstl/functions" %>
<c:if test="${fn:length(attachments) > 0}">
<c:forEach var="attachment" items="${attachments}" varStatus="loopCount">
<c:if test="${loopCount.count eq 1}">
attachment.id
</c:if>
</c:forEach>
</c:if>
Vous pouvez accéder aux éléments individuels avec l'opérateur tableau []:
<c:out value="${attachments[0].id}" />
Cela fonctionnera pour les tableaux et les listes. Cela ne fonctionnera pas pour les cartes et les ensembles. Dans ce cas, vous devez placer la clé de l'élément entre les crochets.
Les ensembles n'ont pas d'ordre, mais si vous voulez toujours obtenir le premier élément, vous pouvez utiliser ce qui suit:
<c:forEach var="attachment" items="${attachments}" end="0">
<c:out value="${attachment.id} />
</c:forEach>
Comme je n'ai qu'un seul élément dans mon ensemble, l'ordre n'est pas important, donc je peux accéder au premier élément comme ceci:
${ attachments.iterator().next().id }
Ne fonctionne que pour les tableaux et les listes, pas pour l'ensemble.
Regardez ici pour une description de la variable statusVar. Vous pouvez faire quelque chose comme ci-dessous, où la variable "status" contient le statut actuel de l'itération. Ceci est très utile si vous avez besoin d'annotations spéciales pour la première et la dernière itération. Dans le cas ci-dessous, je veux supprimer la virgule derrière la dernière balise. Bien sûr, vous pouvez remplacer status.last
avec status.first
pour faire quelque chose de spécial sur la première itération:
<td>
<c:forEach var="tag" items="${idea.tags}" varStatus="status">
<span>${tag.name not status.last ? ', ' : ''}</span>
</c:forEach>
</td>
Les options possibles sont: current, index, count, first, last, begin, step,
et end
Si vous ne voulez que l'élément premier d'un ensemble (et vous êtes certain qu'il y a au moins un élément), vous pouvez faire ce qui suit:
<c:choose>
<c:when test="${dealership.administeredBy.size() == 1}">
Hello ${dealership.administeredBy.iterator().next().firstName},<br/>
</c:when>
<c:when test="${dealership.administeredBy.size() > 1}">
Hello Administrators,<br/>
</c:when>
<c:otherwise>
</c:otherwise>
</c:choose>
Vous pouvez utiliser l'API de flux EL 3.0.
<div>${attachments.stream().findFirst().get()}</div>
Attention! Le EL 3.0 Stream API a été finalisé avant le Java 8 Stream API et il est différent de cela. Ils ne peuvent pas sunc les deux API car cela briserait la compatibilité descendante.
L'utilisation du début et de la fin semblait fonctionner pour moi pour sélectionner une gamme d'éléments. Cela me donne trois listes distinctes. La première liste avec les éléments 1-9, la deuxième liste avec les éléments 10-18 et la dernière liste avec les éléments 11-25.
<ul>
<c:forEach items="${actionBean.top25Teams}" begin="0" end="8" var="team" varStatus="counter">
<li>${team.name}</li>
</c:forEach>
</ul>
<ul>
<c:forEach items="${actionBean.top25Teams}" begin="9" end="17" var="team" varStatus="counter">
<li>${team.name}</li>
</c:forEach>
</ul>
<ul>
<c:forEach items="${actionBean.top25Teams}" begin="18" end="25" var="team" varStatus="counter">
<li>${team.name}</li>
</c:forEach>
</ul>
L'utilisation de $ {mySet.toArray [0]} ne fonctionne pas.
Je ne pense pas que ce soit possible sans avoir pour chaque boucle au moins une itération.