2013-06-14 1 views
0

Je veux boucler une table d'enregistrements pour l'impression, en fonction de la condition suivante:JSP Insérer un pied de page en fonction de la condition dans la boucle for

Si le nombre d'enregistrements est plus de 35 ans, je vais devoir arrêter la boucle , insérez un pied de page et un nouvel en-tête pour la page suivante et continuez son compte jusqu'au dernier enregistrement.

La condition ici est d'utiliser uniquement jsp classique scriplet.

Voici ce que j'ai et je suis coincé: (en pseudo format de code)

<% int j=0; 
    for(int i=0; i < list.size(); i++){ 
    col1 = list.get(i).getItem1(); 
    col2 = list.get(i).getItem2(); 
    col3 = list.get(i).getItem3(); 
    j++; 

    if (j==35) {%> // stops to render footer and next page's header 
    </table> 
    <table> 
     <!-- footer contents --> 
    </table> 
    <table> 
     <!-- header for next page --> 
    </table> 
    <%}%> 
<tr><td><%=col1%></td><td><%=col1%></td><td><%=col1%></td></tr> 

<%}%> 

le problème avec ce modèle est que si j'utilise une pause dans ce cas, j'arrête la boucle et Je ne peux pas passer de l'enregistrement 36 à la fin de l'enregistrement. Comment puis-je faire cela?

+0

Ceci est appelé pagination. Êtes-vous sûr de devoir gérer vous-même ou pouvez-vous utiliser un composant tiers qui gère cela pour vous? En outre, utilisez-vous n'importe quel type de cadre pour votre développement ainsi que Spring MVC ou JSF? –

+0

Salut Luiggi, je ne veux pas utiliser la pagination ici comme pour l'impression. –

Répondre

0

Utilisez un if (i % 35 == 0) pour écrire le pied de page, puis validez s'il y a plus d'éléments dans la liste, donc vous devrez ajouter une nouvelle table et son en-tête. Le code ressemblerait à ceci:

<!-- table header --> 
<% 
int size = list.size(); 
int i = 0; 
for(Iterator<YourObject> it = list.iterator(); it.hasNext();) { 
    i++; 
    YourObject someObject = it.next(); 
    col1 = someObject.getItem1(); 
    col2 = someObject.getItem2(); 
    col3 = someObject.getItem3(); 
    if (i % 35 == 0) { 
%> 
    <!-- table footer --> 
<% 
     if (i < size) { 
%> 
    <!-- breakline and new table header --> 
<% 
     } 
    } 
} 
%> 
<!-- table footer --> 

Notez que dans cet exemple de code J'utilise Iterator au lieu de List#get(int index) car si votre List est un LinkedList il en interne besoin de traverser tous les éléments jusqu'à atteindre l'élément sur la indice désiré (dans ce cas, i). Avec cette implémentation, votre code est encore plus propre.

0

Si vous ne souhaitez pas utiliser la pagination correcte, utilisez JSTL comme indiqué ci-dessous. Plus facile à lire que les scrip-lets, mis à part les avantages évidents.

//The counter variable initialization 
<c:set var="counter" value="0" scope="page"/> 
<c:forEach items="${itemList}" var="item"> 

    //Counter increment 
    <c:set var="counter" value="${counter + 1}" scope="page"/> 
    <tr> 
    <td>${item.propertyOne}</td> 
    <td>${item.propertyOne}</td> 
    </tr> 
    <c:if test="${counter % 35 == 0}"> 
    //Include your footer here. 
    </c:if> 
</c:forEach> 
Questions connexes