2011-09-28 26 views
18

Tôi muốn chèn "tiếp tục" bên trong foreach trong JSTL. Xin vui lòng cho tôi biết nếu có một cách để đạt được điều này.JSTL tiếp tục, đột nhập bên trong foreach

<c:forEach 
    var="List" 
    items="${requestScope.DetailList}" 
    varStatus="counter" 
    begin="0"> 

    <c:if test="${List.someType == 'aaa' || 'AAA'}"> 
    <<<continue>>> 
    </c:if> 

Tôi muốn chèn "tiếp tục" trong điều kiện if.

Trả lời

27

Không có thứ gì như vậy. Chỉ cần làm ngược với nội dung mà bạn thực sự là muốn hiển thị. Vì vậy, không làm

<c:forEach items="${requestScope.DetailList}" var="list"> 
    <c:if test="${list.someType eq 'aaa' or list.someType eq 'AAA'}"> 
     <<<continue>>> 
    </c:if> 
    <p>someType is not aaa or AAA</p> 
</c:forEach> 

nhưng thay vì làm

<c:forEach items="${requestScope.DetailList}" var="list"> 
    <c:if test="${not (list.someType eq 'aaa' or list.someType eq 'AAA')}"> 
     <p>someType is not aaa or AAA</p> 
    </c:if> 
</c:forEach> 

hoặc

<c:forEach items="${requestScope.DetailList}" var="list"> 
    <c:if test="${list.someType ne 'aaa' and list.someType ne 'AAA'}"> 
     <p>someType is not aaa or AAA</p> 
    </c:if> 
</c:forEach> 

Xin lưu ý rằng tôi đã cố định một lỗi cú pháp EL trong mã của bạn là tốt.

+0

+1 aah - bây giờ tôi hiểu tại sao cô ấy muốn sử dụng tiếp tục. Giải thích tốt câu hỏi BalusC! – CoolBeans

+0

Tôi không thể làm ngược lại. Bởi vì, tôi thực hiện một số hành động theo vòng lặp. Tôi muốn dừng lại nếu tình trạng này vượt qua. Tôi muốn đi lặp lại tiếp theo nếu điều kiện này trôi qua. Cảm ơn câu trả lời của bạn. Tôi sẽ cố gắng đi với một logic khác nếu không có cách nào làm cho nó lặp lại tiếp theo với tiếp tục. – Nazneen

+0

Hãy thoải mái chỉnh sửa câu hỏi bằng logic cụ thể. – BalusC

2

Hoặc bạn có thể sử dụng EL chọn tuyên bố

<c:forEach 
     var="List" 
     items="${requestScope.DetailList}" 
     varStatus="counter" 
     begin="0"> 

     <c:choose> 
     <c:when test="${List.someType == 'aaa' || 'AAA'}"> 
      <!-- continue --> 
     </c:when> 
     <c:otherwise> 
      Do something...  
     </c:otherwise> 
     <c:choose> 
    </c:forEach> 
3

tôi sẽ trả lời 'phá vỡ' một phần của câu hỏi của bạn, vì câu trả lời khác tập trung vào 'tiếp tục' (mà thực sự là bất khả thi) . Đây không phải là một 'phá vỡ' thật vì tất cả những gì đến sau trong bước lặp tương tự sẽ vẫn được đánh giá, nhưng bạn có thể tắt các vòng lặp như sau:

<c:forEach var="apple" items="${apples}" varStatus="status"> 
    <c:if test="${apple eq pear}"> 
     ...do stuff with this apple... 
     <c:set var="status.index" value="${items.size}"/> <%-- 'break' out of loop --%> 
     ... stuff here will still be evaluated... 
    </c:if> 
    ... stuff here will still be evaluated... 
</c:forEach> 

Vì vậy, nếu bạn không cần phải nghỉ ngơi của bạn để bỏ qua một số mã, điều này vẫn có thể hữu ích cho bạn. Tất nhiên nói chung nó là BAD-mkay để sửa đổi chỉ số vòng lặp bên trong vòng lặp, nhưng điều này là tốt.

+0

Tôi đã thử phương pháp này, nhưng nó không hiệu quả với tôi. Tôi đã kiểm tra và 'status.index' thực sự không thay đổi sau'

0

Tôi giải quyết nó bằng cách sử dụng Đặt ở phần cuối của mã thực thi của tôi và bên trong vòng lặp

<c:set var="continueExecuting" scope="request" value="false"/> 

sau đó tôi sử dụng biến mà bỏ qua việc thực hiện các mã trong phiên bản kế tiếp sử dụng

<c:if test="${continueExecuting}"> 

bạn có thể đặt nó trở lại đúng bất cứ lúc nào ... chi tiết

<c:set var="continueExecuting" scope="request" value="true"/> 

trên thẻ này tại địa chỉ: 012.

tận hưởng!

Các vấn đề liên quan