2010-01-07 36 views
20

Tôi đang cố xử lý danh sách bằng cách sử dụng jstl. Tôi muốn coi yếu tố đầu tiên của danh sách khác với phần còn lại. Cụ thể, tôi chỉ muốn phần tử đầu tiên có màn hình được đặt để chặn, phần còn lại sẽ bị ẩn.JSTL: danh sách lặp lại nhưng xử lý phần tử đầu tiên khác nhau

Điều tôi có vẻ cồng kềnh và không hoạt động.

Cảm ơn bạn đã được trợ giúp.

<c:forEach items="${learningEntry.samples}" var="sample"> 
    <!-- only the first element in the set is visible: --> 
    <c:if test="${learningEntry.samples[0] == sample}"> 
     <table class="sampleEntry"> 
    </c:if> 
    <c:if test="${learningEntry.samples[0] != sample}"> 
     <table class="sampleEntry" style="display:hidden"> 
    </c:if> 

Trả lời

44

Nó c một được thực hiện thậm chí ngắn hơn, mà không <c:if>:

<c:forEach items="${learningEntry.samples}" var="sample" varStatus = "status"> 
    <table class="sampleEntry" ${status.first ? '' : 'style = "display:none"'}> 
</c:forEach> 
+0

Dựa trên trường hợp sử dụng bạn cũng có thể sử dụng một khi tuyên bố bên trong vòng lặp foreach ' ' – davidcondrey

5

Có, khai báo varStatus = "stat" trong phần tử foreach, vì vậy bạn có thể hỏi nếu đó là phần tử đầu tiên hoặc cuối cùng. Một biến của loại LoopTagStatus.

Đây là doc cho LoopTagStatus: http://java.sun.com/products/jsp/jstl/1.1/docs/api/javax/servlet/jsp/jstl/core/LoopTagStatus.html Nó có các tính chất thú vị hơn ...

<c:forEach items="${learningEntry.samples}" var="sample" varStatus="stat"> 
    <!-- only the first element in the set is visible: --> 
    <c:if test="${stat.first}"> 
     <table class="sampleEntry"> 
    </c:if> 
    <c:if test="${!stat.first}"> 
     <table class="sampleEntry" style="display:none"> 
    </c:if> 

được sửa đổi: sao chép từ axtavt

Nó có thể được thực hiện thậm chí ngắn hơn, mà không <c:if>:

<c:forEach items="${learningEntry.samples}" var="sample" varStatus = "status"> 
    <table class="sampleEntry" ${status.first ? '' : 'style = "display:none"'}> 
</c:forEach> 
Các vấn đề liên quan