迭代收集并在html行jstl中显示

时间:2012-09-22 05:54:49

标签: jstl

我几乎到处搜索这个逻辑,但我确信我没有做得很好,因此这个问题。

我有一个Arraylist,它需要迭代并以下列格式显示

User1 User2 User3
User4 User5 User6
User7 User8 User9

我能够使用普通的JSP scriptlet但不使用JSTL。我尝试过使用JSTL,但它从列表中跳过了一些条目。这是我的代码

    <tr>
        <c:forEach var="party" items="${partiesList}">
        <c:set var="ctr" value="${ctr+1}" scope="page"/>
        <c:choose>
        <c:when test="${ctr le 3}">
            <td>
                <figure>
                    <img src="images/${party.avatarUrl}" onclick="showHide('','${party.screenName}')" class="avaimg" alt="${party.screenName}">
                    <figcaption><spring:message code="user.${party.screenName}" text="${party.screenName}"/></figcaption>
                </figure>
            </td>
        </c:when>
        <c:otherwise>
    </tr>
    <c:set var="ctr" value="0" scope="page"/>
    </c:otherwise>
    </c:choose>
    </c:forEach>

任何帮助将不胜感激。

提前致谢

1 个答案:

答案 0 :(得分:0)

您可以使用varStatus属性和模运算符(%)来完成此操作。

<table>
  <c:forEach var="party" items="${partiesList}" varStatus="status">
    <c:if test="${status.index % 3 == 0}"><tr></c:if>
    <td>${status.index}</td>
    <c:if test="${status.index % 3 == 2}"></tr></c:if>
  </c:forEach>
</table>

varStatus将返回LoopTagStatus个对象,其中index

  

迭代当前轮次的索引。如果正在对基础数组(java.lang.Collection或其他类型)的子集执行迭代,则返回的索引相对于基础集合是绝对的。指数从0开始。

您可以使用modulo运算符检查是否需要启动或关闭新行。


另一种方法是循环遍历列表,将其作为无编号列表输出,并使用CSS按照您希望的方式设置样式。这就是我如何解决它。 CSS的外观示例:

ul.my-class { overflow: hidden; width: 600px; }
ul.my-class li { float: left; width: 200px; }