JSTL突破循环

时间:2013-08-31 12:30:17

标签: loops jstl

我正在尝试从我的朋友列表中检索20条记录,其名称以“J”开头。但是,我意识到JSTL没有中断。所以我尝试使用计数来跟踪记录。我遇到错误'PWC6031:Unterminated< c:set tag'

<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>

2 个答案:

答案 0 :(得分:5)

你使它变得比必要更困难。以下是比你更好的替代解决方案IMO,从最差到最好的解决方案:

  1. 使用varStatus="loopStatus"的{​​{1}}属性,该属性允许使用c:forEach知道循环内迭代的索引。这样可以删除${loopStatus.index}属性。
  2. 使用count
  3. end="19"属性
  4. 在控制器中准备列表(甚至在检索用户时在SQL查询中),以确保它最多只有20个元素:

    c:forEach

答案 1 :(得分:1)

问题似乎与你的第一行有关。您尚未终止c:set标记。