2013-08-31 3 views
1

Я пытаюсь получить 20 записей из моего списка друзей с их именем, начинающимся с 'J'. Однако я понял, что в JSTL нет разрыва. Поэтому я попытался использовать подсчет, чтобы отслеживать записи. Я попал в заблуждение «PWC6031: незавершенная < C: установить метку»JSTL Break out of loop

<c:set var="count" value="0" scope="page"> 
    <c:forEach items="${friendsList}" var="user"> 
     <c:if test="${count < 20}"> 
      <c:set var="string1" value="${fn:substring(user.name, 0, 1)}" /> 
      <c:if test="${fn:startsWith(string1,'J')}"> 
       <tr> 
       <td><c:out value="${user.name}" /></td> 
       <td><img src='https://graph.facebook.com/<c:out value="${user.id}"/>/picture' /> 
       </td> 
      </tr> 
      </c:if> 
     </c:if> 
     <c:set var="count" value="${count + 1}" scope="page"/> 
    </c:forEach> 

Есть ли способ, что я могу получить значение из переменной счетчика? Если нет, есть ли альтернативный способ, чтобы я мог выйти из цикла, чтобы добиться того, чего хочу? Благодарю.

После устранения ошибки, которую я ударил, мне удалось использовать переменную count, чтобы указать, что я хотел. Я перепутал порядок моего кодирования «count» в моем оригинальном кодировании. Вот то, что у меня есть сейчас, работает, спасибо всем за помощь!

<c:set var="count" value="0" scope="page" /> 
    <c:forEach items="${friendsList}" var="user"> 
     <c:if test="${count < 20}"> 
      <c:set var="string1" value="${fn:substring(user.name, 0, 1)}" /> 
      <c:if test="${fn:startsWith(string1,'J')}"> 
       <tr> 
        <td><c:out value="${user.name}" /></td> 
        <td><img src='https://graph.facebook.com/<c:out value="${user.id}"/>/picture' /></td> 
       </tr> 
       <c:set var="count" value="${count + 1}" scope="page" /> 
      </c:if> 
     </c:if> 
    </c:forEach> 

ответ

5

Вы делаете это сложнее, чем необходимо. Вот альтернативные решения, которые все лучше, чем у вас, IMO, от худшего к лучшему:

  1. Используйте атрибутом varStatus="loopStatus" из c:forEach, который позволяет знать индекс итерации внутри цикла с использованием ${loopStatus.index}. Это позволяет удалить атрибут count.
  2. Используйте атрибут c:forEach
  3. end="19" Подготовьте список в контроллере (или даже в вашем SQL запросе, при извлечении пользователей), чтобы убедиться, что он имеет только 20 элементов макс:

    users = users.subList(0, Math.min(users.size(), 20)); 
    
+0

Спасибо за полезную информацию! – Sky

1

Проблема, кажется, с вашей первой линией. Вы не завершили тег c: set.

+0

Я, должно быть, не обратил на это внимания, спасибо. Еще новичок в использовании jstl. – Sky