2009-04-02 4 views
2

J'ai une liste des n éléments que je veux à la sortie dans un groupe de 3. La taille de la collection peut varier beaucoup, mais la sortie doivent être regroupés dans 3.Comment afficher un groupe de 3 éléments d'une collection en utilisant JSTL dans JSP?

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

Je voudrais utilisez une instruction forEach et une instruction if, mais je ne parviens pas à générer correctement la sortie. Aucune suggestion?

Répondre

0

Cela peut ne pas être optimal, mais que diriez-vous de faire un passage dans le scriptlet Java, en créant des groupes de 3, en les ajoutant à un bean, puis en itérant sur ceux avec 2 boucles foreach imbriquées.

2

Je ne suis pas sûr de la syntaxe, mais cela devrait aider, en utilisant le « compte » propriété de « varStatus » de savoir quel numéro élément que vous êtes sur ...

EDIT: Apparemment « .count » n'est pas indexé à zéro, donc le code correct serait:

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

Il peut encore être amélioré, mais pour l'instant cela fonctionne.

Questions connexes