Как выбрать первый элемент набора с помощью JSTL? - PullRequest
50 голосов
/ 16 июня 2009

Мне удалось сделать это с помощью следующего кода, но должен быть более простой способ.

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

Ответы [ 9 ]

84 голосов
/ 17 июня 2009

Вы можете получить доступ к отдельным элементам с помощью оператора array []:

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

Это будет работать для массивов и списков. Это не будет работать для карт и наборов. В этом случае вы должны поместить ключ элемента в скобки.

37 голосов
/ 27 мая 2011

Наборы не имеют порядка, но если вы все еще хотите получить первый элемент, вы можете использовать следующее:

<c:forEach var="attachment" items="${attachments}" end="0">
     <c:out value="${attachment.id} />
</c:forEach>
8 голосов
/ 18 августа 2009

Работает только для массивов и списков, а не для набора.

7 голосов
/ 23 июня 2015

Поскольку в моем наборе есть только один элемент, порядок не важен, поэтому я могу получить доступ к первому элементу следующим образом:

${ attachments.iterator().next().id }
3 голосов
/ 08 августа 2013

Если вам нужен только первый элемент набора (и вы уверены, что есть хотя бы один элемент), вы можете сделать следующее:

<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 голосов
/ 11 декабря 2011

Смотрите здесь для описания переменной statusVar. Вы можете сделать что-то вроде ниже, где переменная «status» содержит текущее состояние итерации. Это очень полезно, если вам нужны специальные аннотации для первого и последнего итераций. В приведенном ниже примере я хочу пропустить запятую за последним тегом. Конечно, вы можете заменить status.last на status.first, чтобы сделать что-то особенное в первой модификации:

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

Возможные варианты: current, index, count, first, last, begin, step, и end

1 голос
/ 20 сентября 2017

Вы можете использовать EL 3.0 Stream API.

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

Будьте осторожны! EL 3.0 Stream API был завершен до Java 8 Stream API, и он отличается от этого. Они не могут использовать оба API, потому что это нарушит обратную совместимость.

0 голосов
/ 20 февраля 2014

Использование начала и конца, похоже, помогло мне выбрать диапазон элементов. Это дает мне три отдельных списка. Первый список с элементами 1-9, второй список с элементами 10-18 и последний список с элементами 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 голосов
/ 07 октября 2009

Использование $ {mySet.toArray [0]} не работает.

Я не думаю, что это возможно без цикла forEach хотя бы одной итерации.

...