كيفية اختيار العنصر الأول من مجموعة مع JSTL?

StackOverflow https://stackoverflow.com/questions/1000876

  •  05-07-2019
  •  | 
  •  

سؤال

تمكنت من القيام بذلك مع التعليمات البرمجية التالية ولكن يجب أن يكون هناك طريقة أسهل.

<%@ 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.في حالة أدناه أريد أن أمية فاصلة وراء آخر الوسم.بالطبع يمكنك استبدال 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>

كن حذرا! على ش 3.0 تيار API تم الانتهاء قبل جافا 8 تيار API و هو يختلف عن ذلك.أنها لا يمكن أن sunc كل من واجهات برمجة التطبيقات لأنه كسر التوافق مع الإصدارات السابقة.

وعن طريق $ {mySet.toArray [0]} لا يعمل.

وأنا لا أعتقد أنه من الممكن دون الحاجة حلقة Foreach واحد على الأقل التكرار.

وعن طريق تبدأ وتنتهي يبدو أن العمل بالنسبة لي لتحديد مجموعة من العناصر. هذا يعطيني ثلاث قوائم منفصلة. القائمة الأولى مع البنود 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>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top