IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Struts 1 Java Discussion :

boucle façon struts


Sujet :

Struts 1 Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 65
    Par défaut boucle façon struts
    Bonjour, j'ai du code en jsp qui marche, mais j'aimerai le stransformer de manière élégant sans jsp, avec des EL , tags et compagnie qui remplaçerai tous mes calculs dans la boucle. Comment je pourrais m'y prendre ?
    <% int j = ((Integer) request.getAttribute("nbr_enregistrement")).intValue()/10;%>

    <%int k = ((Integer) request.getAttribute("serie")).intValue(); %>

    <%int l = ((Integer) request.getAttribute("nbr_enregistrement")).intValue()%10; %>

    <%String pagerPage = (String)request.getAttribute("pagerPage"); %>
    <% int i = 0; %>

    <% int m = 5; %>
    <l:notEqual name="RefMenusForm" property="serie" value="0" >

    <a href="<%=request.getContextPath()%>/RefMenusList.do?reqCode=display&pagerPage=<%=i+1%>&serie=<%=k-1%>">
    &lt;&lt;
    </a>&nbsp;
    </l:notEqual>
    <%--number page in one serie in pagination --%>
    <% if ( j+1 >= 5+( 5*k) )
    m = 5;
    else{
    if(l==0){
    m = j-(5*k);
    }
    else
    m = j+1-(5*k);
    }
    %>

    <% for ( i=(0+(5*k));i<(m+(5*k));i++)
    {
    %>
    <%if(i+1==Integer.parseInt(pagerPage))
    {
    %>
    &nbsp;<b><%=i+1%></b>
    <%}else{ %>
    &nbsp;<a href="<%=request.getContextPath()%>/RefMenusList.do?reqCode=display&pagerPage=<%=i+1%>&serie=<%=k %>">
    <%=i+1%>
    </a>
    <%} %>
    <% } %>
    <% if( m == 5){ %>
    &nbsp;<a href="<%=request.getContextPath()%>/RefMenusList.do?reqCode=display&pagerPage=<%=i+1%>&serie=<%=k+1 %>">
    &gt;&gt;
    </a>

    <% } %>

  2. #2
    Membre chevronné Avatar de djsnipe
    Inscrit en
    Mai 2008
    Messages
    440
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 440
    Par défaut
    Première solution : faire un gros couper coller vers un tag qui soit suffisamment paramétrable pour gérer toutes les parties variables dans le code que tu as indiqué : comment trouver les 3 variables et l'URL à appeler pour paginer.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 65
    Par défaut
    mais j'ai pas trouvé de tag avec 3 parties variables

  4. #4
    Membre chevronné Avatar de djsnipe
    Inscrit en
    Mai 2008
    Messages
    440
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 440
    Par défaut
    Un tag peut avoir autant de paramètres d'appels que nécessaire, tu peux imaginer qq chose du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <xx:pagination 
       scope="request" 
       var1="nbr_enregistrement"
       var2="serie"
       var3="..."
       action="RefMenusList.do" />

  5. #5
    Expert confirmé

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Par défaut
    Sinon, tu dois pouvoir t'en sortir avec la JSTL et les EL mais j'avoue que ça ne va pas être simple à mettre en oeuvre.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 65
    Par défaut
    comment faire les boucles, le if et le else ?
    j'ai trouvé un exemple, j'ai pas trouvé de else
    <c:forEach items="${requestScope['books-list']}" var="book" varStatus="status">
    <li class="${status.index%2==0?'pair':'impair'}">${book.name} (${book.price} &euro
    <c:if test="${book.price < 30.0}">
    <img src='hot.png' alt='Moins de 30 &euro;'/>
    </c:if>
    </li>
    </c:forEach>

  7. #7
    Expert confirmé

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Par défaut
    Il faut utiliser le tag c:choose.

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 65
    Par défaut
    Comment changer la valeur d'une variable pour faire comme ${m2 } = 5 ?
    <c:choose>
    <c:when test="${j2 >= 5+(5*${k2}}" >
    ${m2 } = 5
    </c:when>

  9. #9
    Expert confirmé

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Par défaut
    Pour changer la valeur d'une variable, il faut utiliser le tag c:set.

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 65
    Par défaut
    je l'avais déjà utiliser pour créer ma variable
    <c:set var="k2" value="${RefMenusForm.serie }"/>
    je réutilse <c:set une nouvelle fois pour changer la valeur de la variable alors
    <c:choose>
    <c:when test="${j2 >= 5+(5*${k2}}" >

    <c:set var="k2" value="5"/>
    </c:when>

  11. #11
    Expert confirmé

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Par défaut
    Le tag c:set permet de définir une variable de scope si elle n'existe pas déjà ou de modifier sa valeur si elle existe.

  12. #12
    Membre chevronné Avatar de djsnipe
    Inscrit en
    Mai 2008
    Messages
    440
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 440
    Par défaut
    Citation Envoyé par c_nvy Voir le message
    Sinon, tu dois pouvoir t'en sortir avec la JSTL et les EL mais j'avoue que ça ne va pas être simple à mettre en oeuvre.
    Les taglib ont été prévues justement pour éviter de mettre en oeuvre dans des JSP directement ce genre de bouts de code. Car au final, il faudra mettre ce code dans une JSP commune, qui sera incluse avec des paramètres pour les parties variables. Donc pourquoi passer par une syntaxe JSTL lorsque l'on peut écrire du pur Java, et que l'intégration aux autres JSP sera plus simple ?

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 65
    Par défaut
    tu veux dire que dans mon Action, je fais la boucle for() en java et le résultat est récupéré dans ma jsp ?
    <c:set var="j2" value="${RefMenusForm.nbr_enregistrement /10}"/>
    Pour traitement de la boucle on est obligé d'utiliser le JSTL.

    sinon j'ai une erreur dans car ma valeur dépend de 2 variables, comment les inclure ?
    <c:when test="${l2 ==0}" >

    <c:set var="m2" value="${${j2}-(5*${k2})}"/>
    </c:when >

    je crois qu'il faut faire comme ça:
    <c:set var="m2" value="${j2+1-(5*k2)}"/>

  14. #14
    Expert confirmé

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Par défaut
    Citation Envoyé par djsnipe Voir le message
    Les taglib ont été prévues justement pour éviter de mettre en oeuvre dans des JSP directement ce genre de bouts de code. Car au final, il faudra mettre ce code dans une JSP commune, qui sera incluse avec des paramètres pour les parties variables. Donc pourquoi passer par une syntaxe JSTL lorsque l'on peut écrire du pur Java, et que l'intégration aux autres JSP sera plus simple ?
    J'ai proposé la JSTL comme autre solution au cas où bilobar n'oserait pas se lancer dans l'écriture d'un tag.
    Je n'ai jamais dit que c'était la meilleure solution.
    Et puis, la JSTL, c'est une taglib. Il y a aussi du code Java derrière.

    En tout cas, étant donné que bilobar utilise Struts-Layout, je pense que la solution la plus simple à mettre en oeuvre est d'utiliser tout simplement le tag layout:pager de Struts-Layout qui est prévu pour ça.

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 65
    Par défaut
    voilà la traduction de la scriplet en tag ça marche
    <c:set var="j" value="${RefMenusForm.nbr_enregistrement /10}"/>
    <c:set var="k" value="${RefMenusForm.serie }"/>
    <c:set var="l" value="${RefMenusForm.nbr_enregistrement %10}"/>
    <c:set var="pagerPage" value="${RefMenusForm.pagerPage }"/>
    <c:set var="i" value="${0 }"/>
    <c:set var="m" value="${5 }"/>
    <l:notEqual name="RefMenusForm" property="serie" value="0" >

    <a href="<%=request.getContextPath()%>/RefMenusList.do?reqCode=display&pagerPage=${i +1 }&serie=${k -1 }">
    &lt;&lt;
    </a>&nbsp;
    </l:notEqual>

    <c:choose>
    <c:when test="${j >= (5+5*k)}" >

    <c:set var="m" value="5"/>
    </c:when>
    <c:otherwise>
    <c:choose>
    <c:when test="${l ==0}" >

    <c:set var="m" value="${j-(5*k)}"/>
    </c:when >
    <c:otherwise>
    <c:set var="m" value="${j+1-(5*k)}"/>
    </c:otherwise>
    </c:choose>
    </c:otherwise>
    </c:choose>
    <c:forEach begin="${0+(5*k)}" end="${m+(5*k)-1}" var="i">

    <c:choose>
    <c:when test="${i+1 ==pagerPage}" >
    &nbsp;<b>${i+1}</b>

    </c:when >
    <c:otherwise>
    &nbsp;<a href="<%=request.getContextPath()%>/RefMenusList.do?reqCode=display&pagerPage=${i+1}&serie=${k}">
    ${i+1}
    </a>

    </c:otherwise>
    </c:choose>
    </c:forEach>
    <c:choose>
    <c:when test="${m ==5}" >

    &nbsp;<a href="<%=request.getContextPath()%>/RefMenusList.do?reqCode=display&pagerPage=${i+1}&serie=${k+1}">
    &gt;&gt;</a>
    </c:when >

    </c:choose>

  16. #16
    Expert confirmé

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Par défaut


    Tu pourrais même remplacer les balises <a href...> par des tag html:link.

  17. #17
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 65
    Par défaut
    avec <h:link
    &nbsp;<h:link href="<%=request.getContextPath()%>/RefMenusList.do?reqCode=display&pagerPage=${i+1}&serie=${k}"> ${i+1} </h:link>
    comment écrire ?
    <%=request.getContextPath()%>
    ça devrait ressembler à
    ${ pageContext }
    mais c'est pas exacte

    ça marche sans ça faut juste écrire
    <h:link href="RefMenusList.do?reqCode=display&pagerPage=${i+1}&serie=${k}"> ${i+1} </h:link>

  18. #18
    Expert confirmé

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Par défaut
    Avec le tag html:link, il n'est pas utile de récupérer le contexte de l'appli car le tag se charge de l'ajouter automatiquement.

    Tu peux aussi utiliser l'attribut action à la place de l'attribut href.

    Essaie donc ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <h:link action="RefMenusList.do?reqCode=display&pagerPage=${i+1}&serie=${k}"> ${i+1} </h:link>
    EDIT : Je vois que tu as trouvé avant que je te donne la réponse.

  19. #19
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 65
    Par défaut
    merci pour tout c_nvy et djsnipe

  20. #20
    Expert confirmé

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Par défaut
    De rien.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Struts-Layout] passage de parametre dans une boucle
    Par mama123 dans le forum Struts 1
    Réponses: 2
    Dernier message: 11/06/2009, 15h07
  2. Réponses: 18
    Dernier message: 12/05/2009, 14h44
  3. boucle Struts sur une action !
    Par habasque dans le forum Struts 1
    Réponses: 6
    Dernier message: 09/02/2009, 12h00
  4. [struts]valeur de l'index de boucle
    Par GreenJay dans le forum Struts 1
    Réponses: 6
    Dernier message: 08/11/2005, 12h20
  5. Réponses: 1
    Dernier message: 28/06/2005, 10h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo