52 votes

Comment sélectionner le premier élément d'un ensemble avec JSTL ?

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>

0 votes

La solution en bas comme c:out utilisé n'a pas fonctionné j'obtiens l'erreur suivante javax.el.PropertyNotFoundException: Property '0' not found on type org.hibernate.collection.PersistentSet J'ai utilisé votre code ci-dessus car j'utilise hibernate comme ceci someobject.getSetofsomeObjects() dans le paramètre de la requête

3voto

Ninju Bohra Points 169

Si vous voulez seulement le premièrement élément 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>

1voto

Vous pouvez utiliser l'API de flux EL 3.0.

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

Faites attention ! Le site API de flux EL 3.0 a été finalisé avant le Flux de Java 8 API et c'est différent de ça. Ils ne peuvent pas sunc les deux apis parce que cela briserait la rétrocompatibilité.

0voto

ssmy Points 101

L'utilisation de ${mySet.toArray[0]} ne fonctionne pas.

Je ne pense pas que ce soit possible sans que forEach boucle au moins une itération.

0voto

addzies Points 1

L'utilisation du début et de la fin m'a semblé efficace 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 seconde avec les éléments 10-18, et la dernière 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>

0voto

iamaladdin Points 11

Si c'est un ensemble ${attachments[0].id} ne fonctionnera pas. Utilisez plutôt ceci

${attachments.first().key} o ${attachments.first().value}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X