Question

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>
Était-ce utile?

La solution

Vous pouvez accéder à des éléments individuels avec l'opérateur de tableau []:

<c:out value="${attachments[0].id}" />

Ceci fonctionnera pour les tableaux et les listes. Cela ne fonctionnera pas pour les cartes et les ensembles. Dans ce cas, vous devez mettre la clé de l'élément entre les crochets.

Autres conseils

Les ensembles n'ont pas d'ordre, mais si vous souhaitez toujours obtenir le premier élément, vous pouvez utiliser les éléments suivants:

<c:forEach var="attachment" items="${attachments}" end="0">
     <c:out value="${attachment.id} />
</c:forEach>

Ne fonctionne que pour les tableaux et les listes, pas pour les ensembles.

Comme je n'ai qu'un seul élément dans mon set, l'ordre n'est pas important pour que je puisse accéder au premier élément comme ceci:

${ attachments.iterator().next().id }

Regardez ici pour une description de la variable statusVar. Vous pouvez faire quelque chose comme ci-dessous, où le "statut" variable 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érations. Dans le cas ci-dessous, je souhaite omettre la virgule derrière la dernière balise. Bien sûr, vous pouvez remplacer status.last par status.first pour faire quelque chose de spécial à 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 les suivantes: actuel, index, nombre, premier, dernier, début, étape, et fin

Si vous souhaitez uniquement l'élément first d'un ensemble (et que vous êtes certain qu'il existe au moins un élément), vous pouvez procéder comme 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 EL 3.0 Stream.

<div>${attachments.stream().findFirst().get()}</div>

Faites attention! Le L’API de flux EL 3.0 a été finalisée avant la API Java 8 Stream , ce qui est différent. Ils ne peuvent pas relier les deux apis car cela annulerait la compatibilité ascendante.

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.

L’utilisation de begin et end a semblé fonctionner pour moi de sélectionner une série 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>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top