如何在JSP中使用JSTL显示集合的3个元素?

时间:2009-04-02 20:03:08

标签: jsp jstl

我有一个n个元素的列表,我想在一组3中输出。集合的大小可能会有很大差异,但输出必须分组为3。

<ul>
   <li>
      <div>element 1</div>
      <div>element 2</div>
      <div>element 3</div>
   </li>

   <li>
      <div>element 4</div>
      <div>element 5</div>
      <div>element 6</div>
   </li>

   <li>
      <div>element 7</div>
      <div>element 8</div>
   </li>
 </ul>

我想使用forEach和if语句,但我无法正确生成输出。有什么建议吗?

2 个答案:

答案 0 :(得分:2)

我不确定语法,但这应该有帮助,使用“varStatus”的“count”属性来知道你在哪个元素编号...

编辑:显然“.count”不是零索引,所以正确的代码是:

<%@ taglib uri="http://java.sun.com/jstl/core_rt" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>

...
<c:set var="myListSize" value="${fn:length(myList)}"/>

        <c:forEach var="element" items="${myList}" varStatus="stat">

            <c:choose>

                <c:when test="${ stat.count == 1 }">
                   <ul>
                   <li>
                      <div>${element}</div>
                </c:when>

                <c:when test="${ stat.count == myListSize }">
                      <div>${element}</div>
                   </li>
                   </ul>
                </c:when>

                <c:when test="${stat.count % 3 == 0 && stat.count < myListSize }">
                      <div>${element}</div>
                   </li>
                   <br/>
                   <li>
                </c:when>

                <c:otherwise>
                      <div>${element}</div>
                </c:otherwise>

            </c:choose>

        </c:forEach>

它仍然可以改进,但现在它可以工作。

答案 1 :(得分:0)

这可能不是最佳的,但是如何在Java scriptlet中进行一次传递,创建3s组,将它们添加到bean中,然后迭代那些具有2个嵌套foreach循环的那些。