Pergunta

Eu consegui fazê-lo com o seguinte código, mas deve haver uma maneira mais fácil.

<%@ 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>
Foi útil?

Solução

Você pode acessar elementos individuais com o operador array []:

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

Isto irá funcionar para matrizes e listas. Não vai funcionar para mapas e conjuntos. Nesse caso, você deve colocar a chave do elemento dentro dos colchetes.

Outras dicas

Conjuntos têm nenhuma ordem, mas se você ainda deseja obter o primeiro elemento que você pode usar o seguinte:

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

Trabalho para matrizes e listas apenas, não para set.

Uma vez que eu tenho têm apenas um elemento na minha Set a ordem não é importante para que eu possa acessar para o primeiro elemento como este:

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

aqui para uma descrição de a variável statusVar. Você pode fazer algo como abaixo, onde a variável "status" contém o estado atual da iteração. Isto é muito útil se você precisar de anotações especiais para a primeira e última iteraton. No caso abaixo eu quero omitir a vírgula atrás da última tag. Claro que você pode substituir status.last com status.first fazer algo especial no primeiro itteration:

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

As opções possíveis são: current, index, count, first, last, begin, step, e end

Se você quiser apenas o primeiro elemento de um conjunto (e você está certo, há pelo menos um elemento), você pode fazer o seguinte:

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

Você pode usar a EL 3.0 Fluxo API.

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

Cuidado! O EL 3.0 fluxo API foi finalizado antes do Java 8 fluxo API e é diferente do que isso. Eles não podem sunc ambas as APIs, porque ele vai quebrar a compatibilidade com versões anteriores.

Usando $ {mySet.toArray [0]} não funciona.

Eu não acho que isso é possível sem ter loop foreach pelo menos uma iteração.

Usando começam e terminam parecia trabalho para me para selecionar um intervalo de elementos. Isso me dá três listas separadas. A primeira lista com itens 1-9, segunda lista com itens 10-18, e na última lista com itens 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>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top