Frage

schaffte ich es mit dem nächsten Code zu tun, aber es muss ein einfacher Weg sein.

<%@ 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>
War es hilfreich?

Lösung

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

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

Dies wird für Arrays und Listen arbeiten. Es wird nicht für Karten und Sets arbeiten. In diesem Fall müssen Sie den Schlüssel des Elements innerhalb der Klammern setzen.

Andere Tipps

Sets keine Ordnung, aber wenn Sie immer noch das erste Element erhalten möchten, können Sie mit dem folgenden Befehl:

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

Arbeit für Arrays und Listen, nicht für das Set.

Da ich nur ein Element in meinem Set haben die Reihenfolge ist nicht wichtig So kann ich auf das erste Element zugreifen wie folgt aus:

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

Schauen Sie hier für eine Beschreibung die StatusVar Variable. Sie können so etwas wie unten, wo der „Status“ Variable enthält den aktuellen Zustand der Iteration tun. Dies ist sehr nützlich, wenn Sie spezielle Anmerkungen für die erste und letzte iteraton müssen. Im Fall unten Ich mag das Komma hinter dem letzten Tag ommit. Natürlich können Sie status.last mit status.first ersetzen etwas Besonderes auf dem ersten itteration 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

Wenn Sie nur die ersten Element eines Satzes (und Sie sind sicher, dass es mindestens ein Element ist) 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>

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

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

Seien Sie vorsichtig! Die EL 3.0 Stream-API wurde abgeschlossen, bevor die Java 8-Stream API und es ist anders als das. Sie können nicht beide apis SUNC, weil sie die Abwärtskompatibilität brechen.

Mit $ {mySet.toArray [0]} funktioniert nicht.

Ich glaube nicht, es möglich ist, foreach-Schleife mindestens eine Iteration ohne.

Mit beginnen und enden schien zu funktionieren für mich eine Reihe von Elementen auszuwählen. Das gibt mir drei separate Listen. Die erste Liste mit Artikeln 1-9, zweiter Liste mit Artikeln 10-18, und in der letzten Liste mit Artikeln 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>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top