JSTL로 세트의 첫 번째 요소를 선택하는 방법은 무엇입니까?
문제
다음 코드로 수행했지만 더 쉬운 방법이 있어야합니다.
<%@ 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>