JSTL로 세트의 첫 번째 요소를 선택하는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/1000876

  •  05-07-2019
  •  | 
  •  

문제

다음 코드로 수행했지만 더 쉬운 방법이 있어야합니다.

<%@ 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>
도움이 되었습니까?

해결책

배열 [] 연산자로 개별 요소에 액세스 할 수 있습니다.

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

이것은 배열 및 목록에 대해 작동합니다. 지도와 세트에는 작동하지 않습니다. 이 경우 요소 키를 괄호 안에 넣어야합니다.

다른 팁

세트에는 순서가 없지만 첫 번째 요소를 얻으려면 다음을 사용할 수 있습니다.

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

세트가 아닌 배열 및 목록에만 작동합니다.

내 세트에 하나의 요소 만 가지고 있으므로 주문은 중요하지 않으므로 다음과 같은 첫 번째 요소에 액세스 할 수 있습니다.

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

바라보다 여기 StatusVar 변수에 대한 설명. "상태"변수에 반복의 현재 상태가 포함 된 아래와 같은 작업을 수행 할 수 있습니다. 첫 번째 및 마지막 Iteraton에 특별한 주석이 필요한 경우 매우 유용합니다. 아래의 경우 나는 마지막 태그 뒤에 쉼표를 ommit하고 싶습니다. 물론 당신은 교체 할 수 있습니다 status.last ~와 함께 status.first 첫 번째 itteration에서 특별한 일을하려면 :

<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

당신이 원한다면 첫 번째 세트의 요소 (그리고 당신은 하나 이상의 요소가 있는지 확실합니다) 다음을 수행 할 수 있습니다.

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

EL 3.0 스트림 API를 사용할 수 있습니다.

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

조심하세요! 그만큼 EL 3.0 스트림 API 전에 마무리되었습니다 Java 8 스트림 API와 그것과 다릅니다. 그들은 뒤로 호환성을 깨뜨리기 때문에 두 가지 모두를 햇볕에 쬐 수 없습니다.

$ {myset.toArray [0]} 사용은 작동하지 않습니다.

나는 적어도 하나의 반복을 루프하지 않고는 가능하지 않다고 생각합니다.

시작과 끝을 사용하면 다양한 요소를 선택하는 것이 작동하는 것처럼 보였습니다. 이것은 나에게 세 가지 별도 목록을 제공합니다. 항목 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>
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top