質問
次のコードでなんとかできましたが、もっと簡単な方法があるはずです。
<%@ 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>
配列ではなくリストのみで機能し、セットでは機能しません。
Setに要素が1つしかないため、順序は重要ではありません。したがって、次のように最初の要素にアクセスできます。
${ attachments.iterator().next().id }
の説明については、こちらをご覧くださいstatusVar変数。
以下のようなことができます。「ステータス」変数には、反復の現在のステータスが含まれます。これは、最初と最後の反復に特別な注釈が必要な場合に非常に便利です。以下のケースでは、最後のタグの後ろのコンマを省略します。もちろん、 status.last
を status.first
に置き換えて、最初のイッテレーションで特別なことを行うことができます:
<td>
<c:forEach var="tag" items="${idea.tags}" varStatus="status">
<span>${tag.name not status.last ? ', ' : ''}</span>
</c:forEach>
</td>
可能なオプションは次のとおりです。 現在、インデックス、カウント、最初、最後、開始、ステップ、
および end
セットの first 要素のみが必要な場合(少なくとも1つの要素があることが確実な場合)、次の操作を実行できます。
<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 Stream APIを使用できます。
<div>${attachments.stream().findFirst().get()}</div>
注意! EL 3.0 Stream API は、 Java 8 Stream APIであり、それとは異なります。後方互換性を壊すため、両方のAPIをsuncすることはできません。
$ {mySet.toArray [0]}を使用しても機能しません。
forEachループを少なくとも1回繰り返すことなく可能だとは思わない。
beginとendを使用することで、さまざまな要素を選択することができたようです。これにより、3つの個別のリストが得られます。最初のリストはアイテム1〜9、2番目のリストはアイテム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>