Domanda

Sono riuscito a farlo con il codice successivo ma ci deve essere un modo più semplice.

<%@ 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>
È stato utile?

Soluzione

Puoi accedere a singoli elementi con l'operatore array []:

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

Funzionerà con matrici ed elenchi. Non funzionerà con mappe e set. In tal caso, devi inserire la chiave dell'elemento tra parentesi.

Altri suggerimenti

I set non hanno alcun ordine, ma se vuoi ancora ottenere il primo elemento puoi usare quanto segue:

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

Lavora solo per matrici ed elenchi, non per set.

Dato che ho un solo elemento nel mio set, l'ordine non è importante, quindi posso accedere al primo elemento in questo modo:

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

Cerca qui per una descrizione di la variabile statusVar. Puoi fare qualcosa come sotto, in cui lo stato " " La variabile contiene lo stato corrente dell'iterazione. Questo è molto utile se hai bisogno di annotazioni speciali per il primo e l'ultimo iteraton. Nel caso in basso voglio inserire la virgola dietro l'ultimo tag. Ovviamente puoi sostituire status.last con status.first per fare qualcosa di speciale sulla prima itterazione:

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

Le opzioni possibili sono: corrente, indice, conteggio, primo, ultimo, inizio, passaggio, e fine

Se vuoi solo il primo elemento di un set (e sei sicuro che ci sia almeno un elemento) puoi fare quanto segue:

<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>

È possibile utilizzare l'API Stream EL 3.0.

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

Stai attento! Il API EL 3.0 Stream è stato finalizzato prima che API Java 8 Stream ed è diverso da quello. Non sono in grado di sradicare entrambe le API perché interromperà la compatibilità con le versioni precedenti.

L'uso di $ {mySet.toArray [0]} non funziona.

Non penso che sia possibile senza avere ogni ciclo almeno una iterazione.

L'uso di inizio e fine sembrava funzionare per me per selezionare una gamma di elementi. Questo mi dà tre elenchi separati. Il primo elenco con gli articoli 1-9, il secondo elenco con gli articoli 10-18 e l'ultimo elenco con gli articoli 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>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top