webentwicklung-frage-antwort-db.com.de

Wie wähle ich das erste Element eines Sets mit JSTL aus?

Ich habe es mit dem nächsten Code geschafft, aber es muss einen einfacheren Weg geben.

<%@ 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>
51
Sergio del Amo

Sie können mit dem Operator array [] auf einzelne Elemente zugreifen:

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

Dies funktioniert für Arrays und Listen. Es funktioniert nicht für Karten und Sets. In diesem Fall müssen Sie den Schlüssel des Elements in die Klammern setzen.

85
kgiannakakis

Mengen haben keine Reihenfolge, aber wenn Sie immer noch das erste Element erhalten möchten, können Sie Folgendes verwenden:

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

Da ich nur ein Element in meinem Set habe, ist die Reihenfolge nicht wichtig. So kann ich auf das erste Element zugreifen:

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

Arbeiten Sie nur für Arrays und Listen, nicht für Sets.

8
Ernesto Riera

Suchen Sie nach hier für eine Beschreibung der Variable statusVar. Sie können wie folgt vorgehen, wobei die Variable "status" den aktuellen Status der Iteration enthält. Dies ist sehr nützlich, wenn Sie spezielle Anmerkungen für die erste und letzte Iteration benötigen. Im folgenden Fall möchte ich das Komma hinter dem letzten Tag weglassen. Natürlich können Sie status.last mit status.first, um beim ersten Durchlauf etwas Besonderes zu tun:

<td>
    <c:forEach var="tag" items="${idea.tags}" varStatus="status">
        <span>${tag.name not status.last ? ', ' : ''}</span>
    </c:forEach>
</td>

Mögliche Optionen sind: current, index, count, first, last, begin, step, und end

3
lanoxx

Wenn Sie nur das erste Element einer Menge wollen (und Sie sicher sind, dass es mindestens ein Element gibt), können Sie Folgendes tun:

<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>
3
Ninju Bohra

Sie können die EL 3.0 Stream-API verwenden.

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

Seien Sie vorsichtig! Die EL 3.0 Stream API wurde vor der Java 8 Stream API und dieser fertiggestellt ist anders als das. Sie können nicht beide APIs sonnen, da dies die Abwärtskompatibilität beeinträchtigt.

1

Die Verwendung von begin und end schien für mich zu funktionieren, um eine Reihe von Elementen auszuwählen. Das gibt mir drei separate Listen. Die erste Liste mit den Punkten 1-9, die zweite Liste mit den Punkten 10-18 und die letzte Liste mit den Punkten 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>
0
addzies

Die Verwendung von $ {mySet.toArray [0]} funktioniert nicht.

Ich denke nicht, dass es möglich ist, ohne für jede Schleife mindestens eine Iteration zu haben.

0
prx