52

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

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

10 回答 10

87

您可以使用数组 [] 运算符访问单个元素:

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

这适用于数组和列表。它不适用于地图和场景。在这种情况下,您必须将元素的键放在括号内。

于 2009-06-17T07:02:37.440 回答
38

集合没有顺序,但如果您仍想获得第一个元素,您可以使用以下内容:

<c:forEach var="attachment" items="${attachments}" end="0">
     <c:out value="${attachment.id} />
</c:forEach>
于 2011-05-26T21:53:23.547 回答
9

仅适用于数组和列表,不适用于集合。

于 2009-08-18T16:28:53.580 回答
8

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

${ attachments.iterator().next().id }
于 2015-06-23T16:01:36.797 回答
3

在此处查找statusVar 变量的描述。您可以执行以下操作,其中“状态”变量包含迭代的当前状态。如果您需要第一个和最后一个迭代的特殊注释,这非常有用。在下面的情况下,我想省略最后一个标签后面的逗号。当然,您可以替换status.laststatus.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

于 2011-12-11T15:45:25.207 回答
3

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

<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>
于 2013-08-07T20:29:07.360 回答
1

您可以使用 EL 3.0 Stream API。

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

当心!EL 3.0 Stream API是在Java 8 Stream API之前完成的,它与此不同。他们不能 sunc 两个 api,因为它会破坏向后兼容性。

于 2017-09-20T11:37:20.423 回答
0

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

我认为如果没有 forEach 循环至少一次迭代是不可能的。

于 2009-10-07T11:33:49.393 回答
0

使用 begin 和 end 似乎对我选择一系列元素有用。这给了我三个单独的列表。第一个列表包含项目 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>
于 2014-02-20T16:11:36.400 回答
0

如果是一套${attachments[0].id}就不行了。改用这个

${attachments.first().key}或者${attachments.first().value}

于 2021-07-08T15:25:23.077 回答