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] Problème de récup de multibox dans pagination


Sujet :

Struts 1 Java

  1. #1
    Membre confirmé
    Inscrit en
    Juillet 2008
    Messages
    149
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 149
    Par défaut [Struts-Layout] Problème de récup de multibox dans pagination
    Bonjour,
    Je rencontre un souci. Je n'arrive pas à récuperer les cases cochées de mon tableau lorsque je passe par la pagination. à savoir que je peux que dans la page qui s'affiche et que si je change de page et que je reviens, les cases cochées ne sont plus coché. Pourtant je ne peux que récupérer la liste des cases cochées que d'une page.

    Voici mon code jsp:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <layout:pager maxPageItems="10">
    <layout:collection name="CollectionTestA" id="id" styleClass="collectionItem" styleClass2="collectionItem2">
    <layout:collectionItem title="Imprimer">
    <div align="center" valign="center"><html:multibox property="impression"><bean:write name="id" property="reference"/></html:multibox><bean:write name="id" property="reference"/> </div>
    </layout:collectionItem>
    </layout:collection>
    </layout:pager> <br>
    Pourtant j'ai fait tout ce que je pensais qu'il fallait faire.
    Getter/Setter avec fonction reset dans mon form

    et dans mon action j'ai fait ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public ActionForward executeSpecificAction(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
    BusinessService service = null;
    ImpressionForm impForm = (ImpressionForm) form;
    String[] impression = impForm.getImpression() ;
    	for(int i=0; i < impression.length; i++) {
    			  System.out.println("impression"+i+":" + impression[i]);
    		}
    Si quelqu'un a une idée?
    Merci

  2. #2
    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
    Je ne pense pas que tu sois le seul à avoir le problème.
    Je pense simplement que personne n'a trouvé de solution, moi compris.

    J'ai fait un test en ajoutant un index mais cela ne fonctionne pas mieux.

    Tu peux tout de même faire le test au cas où :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <layout:pager maxPageItems="10">
       <layout:collection name="CollectionTestA" id="id" indexId="index" styleClass="collectionItem" styleClass2="collectionItem2">
          <layout:collectionItem title="Imprimer">
          <div align="center" valign="center">
             <html:multibox property="impression[${index}]">
                <bean:write name="id" property="reference"/>
             </html:multibox>
             <bean:write name="id" property="reference"/>
          </div>
          </layout:collectionItem>
     </layout:collection>
    </layout:pager>
    et pourtant, le formulaire est bien soumis à chaque changement de page mais il ne met pas à jour le tableau de String et je ne comprends pas pourquoi.

  3. #3
    Membre confirmé
    Inscrit en
    Juillet 2008
    Messages
    149
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 149
    Par défaut
    Citation Envoyé par c_nvy Voir le message
    Je ne pense pas que tu sois le seul à avoir le problème.
    Je pense simplement que personne n'a trouvé de solution, moi compris.

    J'ai fait un test en ajoutant un index mais cela ne fonctionne pas mieux.

    Tu peux tout de même faire le test au cas où :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <layout:pager maxPageItems="10">
       <layout:collection name="CollectionTestA" id="id" indexId="index" styleClass="collectionItem" styleClass2="collectionItem2">
          <layout:collectionItem title="Imprimer">
          <div align="center" valign="center">
             <html:multibox property="impression[${index}]">
                <bean:write name="id" property="reference"/>
             </html:multibox>
             <bean:write name="id" property="reference"/>
          </div>
          </layout:collectionItem>
     </layout:collection>
    </layout:pager>
    et pourtant, le formulaire est bien soumis à chaque changement de page mais il ne met pas à jour le tableau de String et je ne comprends pas pourquoi.
    Merci à toi, d'avoir accorder toute ton attention à mon ou un problème qui étrangement Struts n'aurait rien prévu pour simplifier la vie de ce côté ci.

    Concernant l'index, effectivement ça ne marche pas :
    09:58:43,554 ERROR [STDERR] [ERROR] [jsp] - Servlet.service() for servlet jsp threw exception <java.lang.IllegalArgumentException: Invalid indexed property 'impression[${index}]'>java.lang.IllegalArgumentException: Invalid indexed property 'impression[${index}]'

    C'est balot cette histoire

  4. #4
    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
    Concernant ton message d'erreur, c'est tout simplement parce que l'EL ${index} n'est pas interprétée.
    Cela signifie donc que tu n'es pas en J2EE 1.4.
    Pour que l'EL soit interprétée, il faut utiliser la tld struts-html-el.tld et coder ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <html-el:multibox property="impression[${index}]">
    sans oublier d'ajouter au début de la jsp la directive taglib qui pointe sur cette tld.

    Sinon, ce n'est pas Struts qui est en cause mais Struts-Layout car le problème ne se pose que dans le cas d'un layout:collection dans un layout:pager.

    J'ai également testé deux solutions "full" Struts-Layout avec un layout:checkbox à la place du html:multibox ou avec les options selectType, selectName et selectProperty du tag layout:collection mais sans succès.

    Si tu consultes la section TODO de Struts-Layout, tu verras qu'il y a manifestement des problèmes connus avec le layout:pager.

    Pourtant, dans le cas de cette discussion, on arrivait à le faire fonctionner avec des boutons radio en trouvant une solution au problème d'index incorrect.

    Or, dans le cas des checkbox, j'ai testé également avec la solution exposée dans cette discussion avec calcul de l'index mais encore sans succès.

    Il y a donc peut-être une solution miracle pour les checkbox mais pour l'instant, j'avoue ne pas l'avoir trouvé.

    Donc si quelqu'un dans ce forum a la solution, qu'il le dise.

  5. #5
    Membre confirmé
    Inscrit en
    Juillet 2008
    Messages
    149
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 149
    Par défaut
    Citation Envoyé par c_nvy Voir le message
    Concernant ton message d'erreur, c'est tout simplement parce que l'EL ${index} n'est pas interprétée.
    Cela signifie donc que tu n'es pas en J2EE 1.4.
    Pour que l'EL soit interprétée, il faut utiliser la tld struts-html-el.tld et coder ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <html-el:multibox property="impression[${index}]">
    sans oublier d'ajouter au début de la jsp la directive taglib qui pointe sur cette tld.

    Sinon, ce n'est pas Struts qui est en cause mais Struts-Layout car le problème ne se pose que dans le cas d'un layout:collection dans un layout:pager.

    J'ai également testé deux solutions "full" Struts-Layout avec un layout:checkbox à la place du html:multibox ou avec les options selectType, selectName et selectProperty du tag layout:collection mais sans succès.

    Si tu consultes la section TODO de Struts-Layout, tu verras qu'il y a manifestement des problèmes connus avec le layout:pager.

    Pourtant, dans le cas de cette discussion, on arrivait à le faire fonctionner avec des boutons radio en trouvant une solution au problème d'index incorrect.

    Or, dans le cas des checkbox, j'ai testé également avec la solution exposée dans cette discussion avec calcul de l'index mais encore sans succès.

    Il y a donc peut-être une solution miracle pour les checkbox mais pour l'instant, j'avoue ne pas l'avoir trouvé.

    Donc si quelqu'un dans ce forum a la solution, qu'il le dise.
    Oui m'enfin au lien que tu m'as donné TODO
    C'est manifestement dans le cas d'utilisation de collections imbriquées..
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Bugs
    To solve

    * The pager tag does not work with collections that have other collections inside
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

  6. #6
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par c_nvy Voir le message
    ...
    et pourtant, le formulaire est bien soumis à chaque changement de page mais il ne met pas à jour le tableau de String et je ne comprends pas pourquoi.
    Le formulaire n'est pas soumis, la pagination utilise /sort.do pour changer de page et au travers d'une balise <a> (qui ne contient pas les données de la page en cours).

    A ma connaissance, il est impossible d'utiliser un pager avec une liste modifiable.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  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
    Citation Envoyé par OButterlin Voir le message
    Le formulaire n'est pas soumis, la pagination utilise /sort.do pour changer de page et au travers d'une balise <a> (qui ne contient pas les données de la page en cours).
    C'est ce que je croyais aussi mais je me suis aperçue que lorsque je clique sur un numéro de page, le getter de la propriété correspondant à la multibox est appelé.
    Je ne comprends donc pas comment c'est possible vu qu'effectivement, on clique sur un lien et lorsqu'on clique sur un lien, il n'y a pas soumission du formulaire.

    Citation Envoyé par OButterlin Voir le message
    A ma connaissance, il est impossible d'utiliser un pager avec une liste modifiable.
    C'est pourquoi j'ai cité la section TODO de Struts-Layout dans laquelle il est écrit ceci :
    pager: allow editable collections
    ils envisagent donc de le faire dans une future release.

    Mais bon, là c'est un peu particulier parce que la propriété correspondant à la multibox n'est pas une propriété de l'objet constituant la liste.
    C'est directement une propriété du formulaire.
    On ne cherche donc pas à modifier un élément de la liste.

  8. #8
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par c_nvy Voir le message
    C'est ce que je croyais aussi mais je me suis aperçue que lorsque je clique sur un numéro de page, le getter de la propriété correspondant à la multibox est appelé.
    Là, ça m'étonne... J'ai mis un point d'arrêt dans la méthode reset(...) et il n'y est jamais passé... alors un getter
    C'était avec quelle version de struts-layout ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  9. #9
    Membre confirmé
    Inscrit en
    Juillet 2008
    Messages
    149
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 149
    Par défaut
    Citation Envoyé par OButterlin Voir le message
    Là, ça m'étonne... J'ai mis un point d'arrêt dans la méthode reset(...) et il n'y est jamais passé... alors un getter
    C'était avec quelle version de struts-layout ?
    Encore toi?
    décidément tu me suis partout :-p
    Pour le souci de l'autre topic du Vr c'est résolu.
    Je vais fermé l'autre topic de ce pas. Merci à vous de vous pencher sur mon cas ;-)

    Pour La version de struts c'est du 1.2.9 avec du struts-layout 1.2

  10. #10
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par littlebear Voir le message
    Encore toi?
    décidément tu me suis partout :-p
    C'est clair ! Pire que du harcèlement ces personnes qui essayent de t'aider

    En tout cas, pour moi, ce n'est pas possible avec un Pager.

    Si ça ne gène pas trop ton client dont on taira le nom, tu peux peut-être passer par une balise <div style="width:600px; height:300px; overflow:auto"> et charger tout d'un coup...

    A+
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  11. #11
    Membre confirmé
    Inscrit en
    Juillet 2008
    Messages
    149
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 149
    Par défaut
    Citation Envoyé par OButterlin Voir le message
    C'est clair ! Pire que du harcèlement ces personnes qui essayent de t'aider

    En tout cas, pour moi, ce n'est pas possible avec un Pager.

    Si ça ne gène pas trop ton client dont on taira le nom, tu peux peut-être passer par une balise <div style="width:600px; height:300px; overflow:auto"> et charger tout d'un coup...

    A+
    Ouais Tu connais pas la base de données de mon client alors mdrr, c'est pas comme si tu déroulais un papyrus ou un PQ.
    C'est ce qu'on avait pensé pour diminuer le nombre de pages.
    L'inconvénient que je trouve c'est que du coup l'indice de pagination se retrouve tout en bas.

  12. #12
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par littlebear Voir le message
    L'inconvénient que je trouve c'est que du coup l'indice de pagination se retrouve tout en bas.
    Il n'y a pas d'indice de pagination dans ce cas de figure, on charge tout (sans <layout:pager>)
    Du coup, tu as les barres de scroll qui se chargent de la pagination.

    A+
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  13. #13
    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 OButterlin Voir le message
    Là, ça m'étonne... J'ai mis un point d'arrêt dans la méthode reset(...) et il n'y est jamais passé... alors un getter
    C'était avec quelle version de struts-layout ?
    En fait, ce n'est pas lié à la version de Struts-Layout.

    A partir du moment où on a une checkbox ou une radiobox ou un collectionInput et donc que le tag layout:collection est dans un tag layout:form, lorsque tu cliques sur le numéro de page, le formulaire est soumis.

  14. #14
    Membre confirmé
    Inscrit en
    Juillet 2008
    Messages
    149
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 149
    Par défaut
    Citation Envoyé par OButterlin Voir le message
    Il n'y a pas d'indice de pagination dans ce cas de figure, on charge tout (sans <layout:pager>)
    Du coup, tu as les barres de scroll qui se chargent de la pagination.

    A+
    Non, c'est vrai, tu as raison, dans ton truc il n'y a pas de pagination. Nous on avait testé en redimensionnant la taille de l'affichage du tableau mais ça faisait un tit souci d'affichage. Je vais voir ce qu'ils en pense de ton idée... sait on jamais. Je l'avais testé mais faut que je travaille l'affichage pour le montrer. ça m'avait mis dans un coin et ne réagissait pas pareil en fonction du nombre de ligne. :-)
    C'est clair que si l'on ne trouve pas une solution face à ce problème, faudra envisager une autre solution.

  15. #15
    Membre confirmé
    Inscrit en
    Juillet 2008
    Messages
    149
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 149
    Par défaut
    Citation Envoyé par c_nvy Voir le message
    En fait, ce n'est pas lié à la version de Struts-Layout.

    A partir du moment où on a une checkbox ou une radiobox ou un collectionInput et donc que le tag layout:collection est dans un tag layout:form, lorsque tu cliques sur le numéro de page, le formulaire est soumis.
    Que veux tu dire par tu cliques sur le numéro de page et le formulaire est soumis. Soumis dans quel sens?
    J'ai un peu du mal avec la logique des termes....

  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
    Citation Envoyé par littlebear Voir le message
    Que veux tu dire par tu cliques sur le numéro de page et le formulaire est soumis. Soumis dans quel sens?
    J'ai un peu du mal avec la logique des termes....
    Ben comme si tu cliquais sur un bouton submit. La méthode reset de l'ActionForm est appelée ainsi que les getters des propriétés modifiées.

  17. #17
    Membre confirmé
    Inscrit en
    Juillet 2008
    Messages
    149
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 149
    Par défaut
    Citation Envoyé par c_nvy Voir le message
    Ben comme si tu cliquais sur un bouton submit. La méthode reset de l'ActionForm est appelée ainsi que les getters des propriétés modifiées.
    Tout à fait. Merci, j'avais pas très bien compris la phrase

Discussions similaires

  1. [Struts-Layout] problème avec dynMenu
    Par vny dans le forum Struts 1
    Réponses: 3
    Dernier message: 26/11/2008, 14h01
  2. Réponses: 5
    Dernier message: 21/11/2008, 16h46
  3. [Struts-Layout] Problème Javascript dans layout:treeview
    Par lili2704 dans le forum Struts 1
    Réponses: 4
    Dernier message: 14/06/2007, 16h40
  4. [Struts-Layout] Problème de pagination
    Par Haplo2006 dans le forum Struts 1
    Réponses: 1
    Dernier message: 23/02/2007, 18h09
  5. Réponses: 2
    Dernier message: 14/12/2006, 15h43

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