Pregunta

Logré hacerlo con el siguiente código, pero debe haber una manera más 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>
¿Fue útil?

Solución

Puede acceder a elementos individuales con el operador array []:

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

Esto funcionará para matrices y listas. No funcionará para mapas y conjuntos. En ese caso, debe poner la clave del elemento dentro de los corchetes.

Otros consejos

Los conjuntos no tienen orden, pero si aún desea obtener el primer elemento, puede usar lo siguiente:

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

Funciona solo para matrices y listas, no para conjuntos.

Dado que solo tengo un elemento en mi conjunto, el orden no es importante Para poder acceder al primer elemento como este:

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

Busque aquí para obtener una descripción de La variable statusVar. Puede hacer algo como a continuación, donde el "estado" La variable contiene el estado actual de la iteración. Esto es muy útil si necesita anotaciones especiales para la primera y la última iteración. En el siguiente caso, quiero omitir la coma detrás de la última etiqueta. Por supuesto, puede reemplazar status.last con status.first para hacer algo especial en la primera iteración:

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

Las opciones posibles son: actual, índice, conteo, primero, último, comenzar, paso, y end

Si solo desea el primer elemento de un conjunto (y está seguro de que hay al menos un elemento), puede hacer lo siguiente:

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

Puede usar la API EL 3.0 Stream.

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

¡Tenga cuidado! El API EL 3.0 Stream se finalizó antes de Java 8 Stream API y es diferente a eso. No pueden bloquear ambas API porque romperá la compatibilidad con versiones anteriores.

Usar $ {mySet.toArray [0]} no funciona.

No creo que sea posible sin tener para cada bucle al menos una iteración.

Usar el inicio y el final parecía funcionar para mí al seleccionar un rango de elementos. Esto me da tres listas separadas. La primera lista con los elementos 1-9, la segunda lista con los elementos 10-18 y la última lista con los elementos 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 bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top