如何用JSTLselect一个集合的第一个元素?

我设法使用下一个代码,但必须有一个更简单的方法。

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

您可以使用array []运算符访问各个元素:

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

这将适用于数组和列表。 它不适用于地图和集合。 在这种情况下,你必须把元素的关键字放在括号内。

集合没有顺序,但是如果你还想获得第一个元素,你可以使用下面的代码:

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

仅适用于数组和列表,不适用于设置。

因为我在Set中只有一个元素,所以顺序并不重要所以我可以像这样访问第一个元素:

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

在这里查看一下 statusVarvariables的描述。 你可以做下面的事情,其中​​“状态”variables包含迭代的当前状态。 如果您需要第一个和最后一个迭代的特殊注释,这非常有用。 在下面的情况下,我想省略最后一个标签后面的逗号。 当然,你可以用status.last代替status.last ,在第一次迭代时做一些特殊的事情:

 <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

如果您只想要一个集合的第一个元素(并且您确定至less有一个元素),则可以执行以下操作:

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

使用$ {mySet.toArray [0]}不起作用。

我不认为没有forEach循环至less有一个迭代是可能的。

使用开始和结束似乎为我select一系列的元素。 这给了我三个单独的列表。 第一个列表项目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> 

您可以使用EL 3.0 Stream API。

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

小心! EL 3.0 Stream API在Java 8 Stream API之前完成,并且与之不同。 它们不能同时兼顾apis,因为它会打破向后兼容性。