web-dev-qa-db-ja.com

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>
51
Sergio del Amo

配列[]演算子を使用して個々の要素にアクセスできます。

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

これは配列とリストで機能します。マップおよびセットでは機能しません。その場合は、要素のキーを括弧内に配置する必要があります。

85
kgiannakakis

セットには順序はありませんが、最初の要素を取得したい場合は、次を使用できます。

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

Setには要素が1つしかないため、順序は重要ではありません。したがって、次のように最初の要素にアクセスできます。

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

セットではなく、配列およびリストのみで機能します。

8
Ernesto Riera

StatusVar変数の説明については、 here をご覧ください。次のようなことができます。「ステータス」変数には、反復の現在のステータスが含まれます。これは、最初と最後の反復に特別な注釈が必要な場合に非常に便利です。以下のケースでは、最後のタグの後ろのコンマを省略します。もちろん、status.last with status.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

3
lanoxx

セットの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>
3
Ninju Bohra

EL 3.0 Stream APIを使用できます。

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

注意してください!EL 3.0ストリームAPIJava 8ストリーム APIの前に確定され、それとは異なります。後方互換性を壊すため、両方のAPIをsuncすることはできません。

1

Beginとendを使用することで、さまざまな要素を選択することができたようです。これにより、3つの個別のリストが得られます。項目1〜9の最初のリスト、項目10〜18の2番目のリスト、および項目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>
0
addzies

$ {mySet.toArray [0]}を使用しても機能しません。

少なくとも1回はforEachループがなければ不可能だと思います。

0
prx