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] Collection avec des checkbox


Sujet :

Struts 1 Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    230
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 230
    Points : 104
    Points
    104
    Par défaut [Struts-Layout] Collection avec des checkbox
    Ah, je sais il y a pleins de posts sur ce sujet mais j'ai un problème surlequel je m'arrache les cheveux ....

    Voilà mon code de la jsp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <html:form action="ActionValid">
    ...
    <layout:collection property="actionList" styleClass="ARRAY" id="object"
    	selectProperty="id" 
    	selectType="checkbox"
    	selectName="actionSelected">
    <layout:collectionItem title="Identifiant" property="id" />
    <layout:collectionItem title="Comments" property="libelle" />
    </layout:collection>
    ...
    </html:form>
    j'ai une action Init qui vient initialiser mon formulaire(remplir ma liste actionList et creation du tableau actionSelected avec la taille de la liste) . Ensuite j'ai une action Process qui valide le formulaire et qui me retourne les valeurs sélectionnées.

    - le formulaire est mis en session
    - le formulaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    List<ActionBean> actionList
    String[] actionSelected
     
    getters et setters
    - ActionBean :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    String id;
    String libelle;
    Tout s'affiche correctement....
    Mon problème, c'est que le tableau de String[] actionSelected contient bien le bon nombre d'élément( si actionList.size=3, actionSelected =3) mais ces éléments sont tjrs NULL même si je coche une case ou plusieurs cases, .... allez soyons fou toutes les cases!

    Je ne comprends ou est mon erreur ???
    tout aide ; conseil sont les bien venus....

  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
    Bizarre, ça devrait fonctionner.

    Une autre solution serait de passer par un tag html:multibox dans le tag layout:collectionItem comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <layout:collection property="actionList" styleClass="ARRAY" id="object" indexId="index">
       <layout:collectionItem title="">
    	<html:multibox property="actionSelected[${index}]">
     	   <bean:write name="object" property="id"/>
    	</html:multibox>
       </layout:collectionItem>
       <layout:collectionItem title="Identifiant" property="id" />
       <layout:collectionItem title="Comments" property="libelle" />
    </layout:collection>

  3. #3
    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, pour que ta solution fonctionne, il faudrait remplacer, dans l'ActionForm, le setter sur la propriété actionSelected par un setter indexé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public void setActionSelected(int index,String actionSelected)
    {
       this.actionSelected[index] = actionSelected ;
    }
    Mais comme tu initialises la propriété actionSelected avec la taille de la liste actionList dans l'Action d'initialisation (ce qui est logique), tu as besoin du setter non indexé. Tu ne peux donc pas le remplacer par le setter indexé précédent.

    Je te conseille donc d'utiliser la solution que j'ai posté avec le tag html:multibox dans le tag collectionItem parce qu'elle fonctionne sans coder de setter indexé dans l'ActionForm.

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    230
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 230
    Points : 104
    Points
    104
    Par défaut
    malheureusement j'ai le même résultat avec toutes ces solutions, tout s'affiche correctement mais JE N'ARRIVE PAS A RECUPERER LES VALEURS SELECTIONNES dans mes checkbox, le tableau String[] actionSelected contient bien le bon nombre d'élément mais ils SONT TOUS NULL...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    actionSelected=[null, null, null]
    1 solution : ne fonctionne pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <layout:collection property="actionList" styleClass="ARRAY" id="object"
    selectProperty="id" 
    selectType="checkbox"									selectName="actionSelected">
       <layout:collectionItem title="Identifiant" property="id" />
       <layout:collectionItem title="Comments" property="libelle" />
    </layout:collection>
    2 solution : ne fonctionne pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <layout:collection property="actionList" styleClass="ARRAY" id="object" indexId="index">
     <layout:collectionItem title="Test">
        <layout:checkbox property="actionSelected[${index}]" value="${object.id}" layout="false" />
     </layout:collectionItem>
     <layout:collectionItem title="Identifiant" property="id" />
     <layout:collectionItem title="Comments" property="libelle" />
    </layout:collection>
    3 solution : ne fonctionne pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <layout:collection property="actionList" styleClass="ARRAY" id="object" indexId="index">
       <layout:collectionItem title="">
    	<html:multibox property="actionSelected[${index}]">
     	   <bean:write name="object" property="id"/>
    	</html:multibox>
       </layout:collectionItem>
       <layout:collectionItem title="Identifiant" property="id" />
       <layout:collectionItem title="Comments" property="libelle" />
    </layout:collection>
    tout ceux-ci parait bizarre : car il y a des posts sur ce forum pour qui cela a l'air de fonctionner, je reste dubitatif (struts 1.3.10 - struts-layout 1.3)
    en plus quand je regarde le code html généré j'ai toujours :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    ...
    <input type="checkbox" value="CK0" name="actionSelected[0]"/>
    ...
    <input type="checkbox" value="CK1" name="actionSelected[1]"/>
    .....
    <input type="checkbox" value="CK1" name="actionSelected[2]"/>
    .....
    valeur id=(CK0, CK1, CK2) : le code html généré me parait correct pour le peu que j'ai compris dans le fonctionnement de struts-layout

    je ne vois pas où peut être le problème.... car tout ce beau code pour des checkbox sans pouvoir savoir laquelle checkbox est coché; devient INUTILE !!

    En attente de la solution miracle, aide, conseil, astuce....
    merci d'avance

  5. #5
    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
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    Personnellement, la manière de gérer cette fonctionnalité par struts-layout me gave littéralement, je fais comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <layout:collection property="list" id="elem">
        <layout:collectionItem title="" style="width:10px">
            <input type="checkbox" name="uid" value="${elem.uid}"/>
        </layout:collectionItem>
    ...
    Côté contrôeleur, je gère de manière standard via
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    String[] selectedUIDs = request.getParameterValues("uid");
    Si ça peut t'aider...

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    230
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 230
    Points : 104
    Points
    104
    Par défaut
    je suis un GROS BOULET....
    mon problème vient juste de me sauter au yeux, j'avais mis pour Submiter mon formulaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <html:link action="process">
    <html:img src="valider.gif" alt="Bouton : Valider" title="Valider"></html:img>
    </html:link>
    eh ben ce code, ne Submite pas le formulaire, en remplaçant, cela marche bcp mieux avec toutes les solutions évoquées dans les messages précédent.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <html:image src="valider.gif" property="submit" alt="Bouton : Valider" title="Valider"></html:image>
    Ben c'est évident, je vous l'accorde.... heureusement que c'est le WE bientôt...
    C'est grâce à ton dernier message OButterlin, qd j'ai vu que je ne pouvais pas récupérer le parametre avec le code que tu m'as proposé.
    j'aimerais savoir pourquoi tu dis cela :
    Personnellement, la manière de gérer cette fonctionnalité par struts-layout me gave littéralement,
    je m'excuse pour avoir pris du tps au gens pour ma bourde et je tiens à vous remercier de votre implication !!

  7. #7
    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
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    Je trouve que pour récupérer la liste des id sélectionnés dans la page, c'est très contraignant de devoir passer par un setter indexé, d'autant que dans la plupart des cas, c'est récupéré, consommé et perdu...
    Bref, rien de plus simple que request.getParameterValues(...)

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 07/05/2010, 10h30
  2. struts layout (layout;collection) avec tiles
    Par h_ismaili dans le forum Struts 1
    Réponses: 0
    Dernier message: 05/08/2008, 19h50
  3. [Struts-Layout] problème avec layout:collection
    Par khayri dans le forum Struts 1
    Réponses: 4
    Dernier message: 31/05/2007, 13h28
  4. [Struts-Layout] treeview avec des checkbox
    Par guiillaume63 dans le forum Struts 1
    Réponses: 3
    Dernier message: 16/05/2007, 14h46
  5. [Struts-Layout] collection et checkbox
    Par khayri dans le forum Struts 1
    Réponses: 14
    Dernier message: 03/05/2007, 12h19

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