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 :

[Struts-Layout] probleme avec pager et sort


Sujet :

Struts 1 Java

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2005
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 32
    Points : 16
    Points
    16
    Par défaut [Struts-Layout] probleme avec pager et sort
    Bonjour, j'ai un petit souci avec le pager de struts-layout, en effet, quand je change de page, cela fonctionne correctement sur la premiere page, le tri en tout cas, mais lorsque je change de page, seule la premiere colonne est mise a jour, les données des autres colonnes ne bougent pas...
    voici le code de ma jsp :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    <layout:form action="processTabList.do" styleClass="FORM" key="Main form" >
        <layout:pager maxPageItems="10" >
    		<layout:collection property="depList" styleClass="FORM" align="center" width="100%" indexId="index" >
    			<layout:collectionItem title="Code" property="code" sortable="true"/>
    			<layout:collectionInput title="Libellé" property="libelle" formProperty="libelle" sortable="true" />
    			<layout:collectionItem title="Etat">
    				<layout:radios layout="false" property="depList[${index}].etat" cols="3">
    					<layout:option value="etat1" key="Etat1" />
    					<layout:option value="etat2" key="Etat2" />
    					<layout:option value="etat3" key="Etat3" />
    				</layout:radios>		
    			</layout:collectionItem>
    		</layout:collection>
    		<layout:row>
    			<layout:pagerStatus key="pager.status.pager" />
    			<layout:pagerStatus key="pager.status.items"/>
    		</layout:row>
    	</layout:pager>   
    </layout:form>
    Un petit coup de mains ne serait pas de refus ! ^^

  2. #2
    Expert éminent

    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
    Points : 7 778
    Points
    7 778
    Par défaut
    As-tu fait le test du tri côté client en ajoutant l'attribut sortAction="client" dans le tag layout:collection, pour voir si ça donne le même résultat ?

    A moins que tu veuilles absolument faire le tri côté serveur ?

  3. #3
    Membre à l'essai
    Inscrit en
    Avril 2005
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 32
    Points : 16
    Points
    16
    Par défaut
    En fait quand j'utilise le pager conjointement avec la fonction de tri, cela force le tri à se faire coté server. du coup le probleme ne change pas. de plus le tri coté client fonctionne mal sur firefox, le tri se faisant toujours sur la même colonne (meme si mon appli doit avant tout etre compatible ie6 et 7).

  4. #4
    Expert éminent

    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
    Points : 7 778
    Points
    7 778
    Par défaut
    Effectivement, tu as raison, le tri se fait côté serveur lorsqu'on utilise le tag layout:pager.
    J'en avais même déjà débattu dans cette discussion. J'avais oublié.

    Utilises-tu l'Action de tri SortAction de Struts-Layout ou une Action de tri perso ?

  5. #5
    Membre à l'essai
    Inscrit en
    Avril 2005
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 32
    Points : 16
    Points
    16
    Par défaut
    J'utilise l'action de tri SortAction, qui est bien déclarée dans mon struts-config.xml, ainsi que PagerAction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <action
       path="/sort"
       type="fr.improve.struts.taglib.layout.sort.SortAction"
       scope="request"
       validate="false" />
    <action
       path="/page"
       type="fr.improve.struts.taglib.layout.sort.PageAction"
       scope="request"
       validate="false" />
    Je ne comprends pas...

  6. #6
    Expert éminent

    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
    Points : 7 778
    Points
    7 778
    Par défaut
    Apparemment, tu utilises une ancienne version de Struts-Layout parce que l'Action PageAction n'existe plus dans la version 1.2 et on ne doit donc plus la déclarer dans le struts-config.xml.

    Il serait peut-être bon de télécharger la 1.2.
    Sinon, quelle version de Struts utilises-tu ?

  7. #7
    Membre à l'essai
    Inscrit en
    Avril 2005
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 32
    Points : 16
    Points
    16
    Par défaut
    j'utilise la version 1.2 de struts-layout (d'ailleurs j'ai retiré la déclaration de PageAction, et ca n'a rien changé) avec la version 1.3.8 de struts (que je suis obligé d'utiliser)

  8. #8
    Expert éminent

    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
    Points : 7 778
    Points
    7 778
    Par défaut
    Citation Envoyé par Kendael
    Bonjour, j'ai un petit souci avec le pager de struts-layout, en effet, quand je change de page, cela fonctionne correctement sur la premiere page, le tri en tout cas, mais lorsque je change de page, seule la premiere colonne est mise a jour, les données des autres colonnes ne bougent pas...
    Aprsè relecture de ton message, je ne suis plus certaine d'avoir bien compris ce qui ne fonctionne pas.
    Pourrais-tu être plus précis ?

    Parce que normalement, même si tu utilises le layout:pager, le tri s'effectue sur toutes les occurences du champ.
    Donc, si tu es sur la page 2 et que tu cliques sur le tri, le tri s'effectue et tu te retrouves automatiquement sur la page 1.
    En tout cas, c'est comme cela que ça fonctionne chez moi.

  9. #9
    Membre à l'essai
    Inscrit en
    Avril 2005
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 32
    Points : 16
    Points
    16
    Par défaut
    En fait j'ai un tableau a 3 colonnes.
    Sur la première page j'ai par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    col1  ||  col2  ||  col3
    1            1a         1b
    2            2a         2b
    3            3a         3b
    si je passe à la page 2 j'obtiens :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    col1  ||  col2  ||  col3
    4            1a         1b
    5            2a         2b
    6            3a         3b
    Seules les valeurs de la première colonnes sont "mises à jour" lors du changement de page. Les autres correspondent toujours aux valeurs de la première page... Le problème subsiste si j'enlève la fonction de tri...

  10. #10
    Expert éminent

    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
    Points : 7 778
    Points
    7 778
    Par défaut
    Merci, c'est plus clair pour moi comme ça.

    Effectivement, ce n'est pas vraiment normal ce qui t'arrive.
    Dis-moi, ta collection contient-elle beaucoup de lignes ?

  11. #11
    Membre à l'essai
    Inscrit en
    Avril 2005
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 32
    Points : 16
    Points
    16
    Par défaut
    Ma collection contient 50 lignes, c'est pour tester la fonctionnalité. Je pense que le problème vient du fait que l'index
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <layout:collection property="depList" styleClass="FORM" align="center" width="100%" indexId="index" >
    qui est utilisé pour afficher les valeurs des 2 dernières colonnes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <layout:collectionItem title="Libellé" property="libelle" sortable="true" />
    <layout:collectionItem title="Etat">
        <layout:radios layout="false" property="depList[${index}].etat" cols="3">
    	<layout:option value="etat1" key="Etat1" />
            <layout:option value="etat2" key="Etat2" />
            <layout:option value="etat3" key="Etat3" />
        </layout:radios>
    </layout:collectionItem>
    ne doit plus être correcte à cause de la pagination, en gros il reste entre 0 et maxPageItems...

  12. #12
    Expert éminent

    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
    Points : 7 778
    Points
    7 778
    Par défaut
    Pour les boutons radio, tu devrais faire un test en utilisant les attributs selectName, selectProperty et selectType du tag layout:collection.

  13. #13
    Membre à l'essai
    Inscrit en
    Avril 2005
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 32
    Points : 16
    Points
    16
    Par défaut
    Ces attributs ne me servent pas, puisqu'ils servent à la sélection de lignes dans la collection, mes radios me permettent juste de switcher un attribut. Par exemple pour imaginons une liste de portes, je renseigne si elle est "ouverte", "fermée" ou "entrebaillée". Rien avoir donc avec les attributs de layout:collection, mais merci bcp de creuser avec moi .
    La je vais tester la dernière nightly-build, apparemment c'est un bug qui a été fixé depuis.

  14. #14
    Expert éminent

    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
    Points : 7 778
    Points
    7 778
    Par défaut
    Citation Envoyé par Kendael
    Ces attributs ne me servent pas, puisqu'ils servent à la sélection de lignes dans la collection, mes radios me permettent juste de switcher un attribut. Par exemple pour imaginons une liste de portes, je renseigne si elle est "ouverte", "fermée" ou "entrebaillée". Rien avoir donc avec les attributs de layout:collection, mais merci bcp de creuser avec moi .
    Ok, autant pour moi.

    Citation Envoyé par Kendael
    La je vais tester la dernière nightly-build, apparemment c'est un bug qui a été fixé depuis.
    C'est une bonne idée.
    Tiens-nous au courant.

  15. #15
    Membre à l'essai
    Inscrit en
    Avril 2005
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 32
    Points : 16
    Points
    16
    Par défaut
    Bon eh bien la solution de la nightly-build n'a pas fonctionné, je reste toujours dans l'incapacité de faire fonctionner correctement le pager avec des collection:input ou tout autre élément qui nécessite un index de bean courant...

  16. #16
    Expert éminent

    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
    Points : 7 778
    Points
    7 778
    Par défaut
    En fait, j'ai fait un test et j'ai exactement le même problème que toi.

    Après recherche, dans la page TODO de Struts-Layout, j'ai trouvé ceci :
    pager: allow editable collections
    Ceci est donc prévu dans une prochaine release.

    Il va donc falloir attendre pour que cela fonctionne.

  17. #17
    Membre à l'essai
    Inscrit en
    Avril 2005
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 32
    Points : 16
    Points
    16
    Par défaut
    aïe ! bon eh bien en tout cas merci bcp pour ton aide ! je vais chercher une autre solution...

  18. #18
    Expert éminent

    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
    Points : 7 778
    Points
    7 778
    Par défaut
    En fait, il y a une solution en calculant la valeur de l'index en fonction de la page sélectionnée et du nombre maximum d'éléments affichés par page (soit 10 dans ton cas).

    Il faut donc pour que cela fonctionne récupérer la valeur du paramètre pagerPage de l'Action de path /sort, si il existe.

    Voici donc une solution avec la JSTL :

    Récupérer la valeur du paramètre pagerPage et mettre sa valeur dans une variable pagerPage. S'il n'existe pas, lui affecter la valeur 0 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <c:choose>
    	<c:when test="${param['pagerPage']==null}">
    		<c:set var="pagerPage" value="0"/>
    	</c:when>
    	<c:otherwise>
    		<c:set var="pagerPage" value="${param['pagerPage']}"/>
    	</c:otherwise>
    </c:choose>
    Calculer la valeur de l'index et stocker le résultat dans une variable newIndex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <c:choose>
     	<c:when test="${pagerPage==0}">
    	 	<c:set var="newIndex" value="${index}"/>
    	</c:when>
     	<c:otherwise>
     		<c:set var="newIndex" value="${index+(10*pagerPage)}"/>
    	</c:otherwise>
    </c:choose>
    Utiliser la nouvelle variable d'index en remplaçant le collectionInput sur le libelle par ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <layout:collectionItem  title="Libelle">
    	<layout:text property="depList[${newIndex}].libelle" layout="false" />
    </layout:collectionItem>
    Et enfin, utiliser la nouvelle variable d'index pour les boutons radio :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <layout:collectionItem title="Etat">
        <layout:radios layout="false" property="depList[${newIndex}].etat" cols="3">
    	<layout:option value="etat1" key="Etat1" />
            <layout:option value="etat2" key="Etat2" />
            <layout:option value="etat3" key="Etat3" />
        </layout:radios>
    </layout:collectionItem>

  19. #19
    Membre à l'essai
    Inscrit en
    Avril 2005
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 32
    Points : 16
    Points
    16
    Par défaut
    magnifique ! merci beaucoup ! cela fonctionne très bien. en revanche le tri ne peut plus se faire sur l'objet
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <layout:collectionItem title="Libelle" >
        <layout:text property="depList[${newIndex}].libelle" layout="false" />
    </layout:collectionItem>
    puisque celui-ci ne renseigne plus d'attribut "property"... mais merci beaucoup en tout cas, cela résoud une grande partie du problème.

  20. #20
    Expert éminent

    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
    Points : 7 778
    Points
    7 778
    Par défaut
    Effectivement, j'avais oublié que tu souhaitais pouvoir faire un tri sur le libelle.

    Mais je viens de m'apercevoir qu'il existait un attribut formIndex dans le tag collectionInput qui permet de spécifier le nom de la variable d'index.

    Tu peux donc réutiliser le tag collectionInput en spécifiant la nouvelle variable d'index newIndex dans l'attribut formIndex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <layout:collectionInput title="Libellé" property="libelle" formProperty="libelle" formIndex="newIndex" sortable="true"/>

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [Struts-Layout] probleme pagination avec datagrid
    Par zineb_cyn dans le forum Struts 1
    Réponses: 14
    Dernier message: 03/08/2009, 13h58
  2. [Struts-Layout] probleme avec la collection
    Par verdi-verda dans le forum Struts 1
    Réponses: 2
    Dernier message: 17/09/2008, 20h58
  3. [Struts-Layout] problème du <layout:pager>
    Par osman.amine dans le forum Struts 1
    Réponses: 12
    Dernier message: 09/08/2007, 19h46
  4. [Struts-Layout] Tableau avec deux couleurs alternées
    Par yolepro dans le forum Struts 1
    Réponses: 2
    Dernier message: 18/09/2006, 17h47
  5. [Struts-layout]err. avec layout:menuItem
    Par javazer dans le forum Struts 1
    Réponses: 7
    Dernier message: 14/04/2006, 15h08

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