Как показать группу из 3 элементов коллекции, используя JSTL в JSP? - PullRequest
2 голосов
/ 03 апреля 2009

У меня есть список из 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 ]

2 голосов
/ 03 апреля 2009

Я не уверен насчет синтаксиса, но это должно помочь, используя свойство count в varStatus, чтобы узнать, на каком номере элемента вы находитесь ...

РЕДАКТИРОВАТЬ: Очевидно, ".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>

Это еще можно улучшить, но пока это работает.

0 голосов
/ 03 апреля 2009

Это может быть неоптимально, но как насчет простого выполнения одного прохода в Java-скриптлете, создания групп по 3, добавления их в bean-компонент и последующей итерации по тем, которые имеют 2 вложенных цикла foreach.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...