2

我正在尝试从我的朋友列表中检索 20 条姓名以“J”开头的记录。但是,我意识到 JSTL 没有中断。所以我尝试使用计数来跟踪记录。我遇到错误“PWC6031:未终止 <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>
4

2 回答 2

5

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

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

    users = users.subList(0, Math.min(users.size(), 20));
    
于 2013-08-31T12:49:59.993 回答
1

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

于 2013-08-31T12:48:59.237 回答