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 :

html:checkbox et liste de bean


Sujet :

Struts 1 Java

  1. #1
    Membre confirmé Avatar de lextaz33
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2008
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2008
    Messages : 169
    Par défaut html:checkbox et liste de bean
    Bonjour, voila dans ma jsp j'ai une liste de bean sous forme de tableau avec à chaque ligne une case à cocher. Le but, je coche une case, j'appuie sur le bouton imprimer et j'imprime la ou les lignes sélectionnées.

    Dans ma jsp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <logic:iterate id="composantDotation" name="dotationForm" property="composantDotationList" indexId="ind">
    <td headers="col00"><html:checkbox name="dotationForm" property="impressionEtiquettes" value="<%=String.valueOf(value)%>"></html:checkbox></td>
    <td headers="col01"><bean:write name="composantDotation" property="codeGEF"/></td>
    </logic:iterate>
    composantDotationList est ma liste de bean composantDotation
    dotationForm le formulaire défini ci-après

    Mon Form-bean:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <form-bean name="dotationForm"
                type="org.apache.struts.action.DynaActionForm">
                <form-property name="composantDotationList" type="java.util.List"/>
                <form-property name="impressionEtiquettes" type="java.lang.String[]"/>            
            </form-bean>
    Et dans mon action j'essaye ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    String[] tabEditer =(String[])dotationForm.getStrings("impressionEtiquettes");
    Je suis un peu perdu avec tout les posts qui disent qu'il faut un tableau de booleen ou de string.
    Pour l'instant mon erreur est la suivante :
    INFO [STDOUT] java.lang.ArrayIndexOutOfBoundsException: 0
    lorsque j'essai de visualiser ce qui se trouve dans impressionEtiquettes[i]

    Je veux savoir comment récupérer ce tableau pour chaque bean de ma liste?
    Suis-je sur le bon chemin ou ce n'est pas comme ca du tout?

  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
    Normalement, il faut initialiser le tableau de String dans la méthode reset de l'ActionForm.
    Etant donné que tu utilises une ActionForm dynamique, peut-être que ça fonctionne en ajoutant l'attribut initial :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <form-property name="impressionEtiquettes" type="java.lang.String[]" initial="new String[0]"/>
    A tester.

  3. #3
    Membre confirmé Avatar de lextaz33
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2008
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2008
    Messages : 169
    Par défaut
    No malheureusement.
    Avec l'attribut initial, le tableau est de longueur 5 (pourquoi je sais pas) et a pour valeur new et string.

    J'ai essayé avec une propriété de même type défini dans le bean composantDotation mais le résultat est le même.
    Je suis un peu perdu!

  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
    Si le form-bean dotationForm est bien dans le scope session, tu peux initialiser le tableau de String avec la taille de la collection dans l'Action qui s'exécute avant l'affichage de la collection :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dotationForm.set("impressionEtiquettes",new String[composantDotationList.size()]) ;

  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
    J'ai oublié de préciser qu'il fallait remplacer le tag html:checkbox par un tag html:multibox.

  6. #6
    Membre confirmé Avatar de lextaz33
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2008
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2008
    Messages : 169
    Par défaut
    Merci ca avance pas mal...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dotationForm.set("impressionEtiquettes",new String[composantDotationList.size()]) ;
    Cette ligne initialise bien ma propriété à la bonne taille dans l'ActionLoad.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String[] tabEditer = (String[])dotationForm.getStrings("impressionEtiquettes");
    Cette ligne récupère la propriété (donc bien initialisé) dans l'ActionPrint mais même si mon tableau comprend le bon nombre de colonne, elle sont toutes null.

    Que dois-je faire pour récupérer dans ce tableau si la case est coché ou pas?

  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
    Le scope du form-bean dotationForm est-il bien égal à session dans le mapping des Actions liées à ce form-bean ?

  8. #8
    Membre confirmé Avatar de lextaz33
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2008
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2008
    Messages : 169
    Par défaut
    Oui c'est bien en session!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <action path="/dotationImpressionEtiquette"
    			type="com.siemens.med.hs.weboffice.struts.action.DotationImpressionEtiquetteAction"
    			name="dotationForm"
    			scope="session"
    			input="weboffice.parametres.contenuDotation">
    			<forward name="success" path="weboffice.parametres.contenuDotation"/>
    		</action>
    Mais j'ai toujours un nullpointerexception sur la ligne suivante (tabEditer[i]):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    for (Integer i = 0; i < composantList.size(); i++)
    	            {
     
    	            	System.out.println(tabEditer[i].toString());
     
    	            }

  9. #9
    Membre confirmé Avatar de lextaz33
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2008
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2008
    Messages : 169
    Par défaut
    En fait toutes les valeurs du tableau sont à null

  10. #10
    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
    C'est plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for (int i = 0; i < tabEditer.length; i++)
    {
       System.out.println(tabEditer[i].toString());
    }
    Sinon, as-tu bien remplacé le tag checkbox par un multibox comme je te l'ai indiqué ?

    Sinon, comme tu as codé value="<%=String.valueOf(value)%>" dans le tag checkbox, as-tu bien une propriété value dans l'objet composantDotation et cette propriété est-elle bien renseignée pour chaque objet composantDotation de la collection composantDotationList ?

  11. #11
    Membre confirmé Avatar de lextaz33
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2008
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2008
    Messages : 169
    Par défaut
    Oui j'ai bien remplacé par multibox,
    pour la boucle ca ne change rien, tabEditer.length = composantList.size() et toute les valeurs sont à null de toute façon.


    Concernant le code value="<%=String.valueOf(value)%>", je l'ai défini comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <bean:define id="value" name="composantDotation" property="idComposantDotation"/>
    Cette valeur existe et n'est pas null, j'ai essayé à l'instant en remplacant cette valeur par un string basique value="1" ca ne change rien.
    J'ai également essayé comme ceci sans changement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <html:multibox styleId="<%=String.valueOf(ind)%>" name="dotationForm" property="impressionEtiquettes"><bean:write name="composantDotation" property="idComposantDotation"/></html:multibox>

  12. #12
    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
    Peux-tu montrer le code html généré de la page jsp ?

  13. #13
    Membre confirmé Avatar de lextaz33
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2008
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2008
    Messages : 169
    Par défaut
    Je vous met les 3 premières lignes de mon tableau généré:
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
    <tr class="even">																					
    <td headers="col00"><input type="checkbox" name="impressionEtiquettes" value="100" id="0"></td>							
    <td headers="col01">AAAAA</td>
    <td headers="col02">AAAAAAAAAAAAAA</td>
    <td headers="col03">AAAAAAAA</td>
    <td headers="col04">AAAAAAAAA</td>
    <td headers="col05">AAAAAA</td>
    <td headers="col06"><input type="text" name="composantDotationList[0].seuilMinString" value="5" onchange="setChange()"></td>
    <td headers="col07"><input type="text" name="composantDotationList[0].stockMaxString" value="20" onchange="setChange()"></td>
    <td headers="col08">AAAAAA</td>
    <td headers="col09"><a href="/weboffice/dotationDelete.do?id=100">Supprimer</a></td>
    </tr>
     
    <tr class="odd">																					
    <td headers="col00"><input type="checkbox" name="impressionEtiquettes" value="101" id="1"></td>							
    <td headers="col01">AAAAAAAAA</td>
    <td headers="col02">AAAAAAAAAAAA</td>
    <td headers="col03">AAAAAAAAA</td>
    <td headers="col04">AAAAAAAAAA</td>
    <td headers="col05">AAAAAAAAAA</td>
    <td headers="col06"><input type="text" name="composantDotationList[1].seuilMinString" value="5"
    onchange="setChange()"></td>
    <td headers="col07"><input type="text" name="composantDotationList[1].stockMaxString" value="20"
    onchange="setChange()"></td>
    <td headers="col08">AAAAAAAA</td>
    <td headers="col09"><a href="/weboffice/dotationDelete.do?id=101">Supprimer</a></td>
    </tr>
     
    <tr class="even">																					
    <td headers="col00"><input type="checkbox" name="impressionEtiquettes" value="102" id="2"></td>							
    <td headers="col01">AAAAAAAAA</td>
    <td headers="col02">AAAAAAAAAAAAAA</td>
    <td headers="col03">AAAAAAAAAAAAA</td>
    <td headers="col04">AAAAAAAAAAAAA</td>
    <td headers="col05">AAAA</td>
    <td headers="col06"><input type="text" name="composantDotationList[2].seuilMinString" value="5"
    onchange="setChange()"></td>
    <td headers="col07"><input type="text" name="composantDotationList[2].stockMaxString" value="20"
    onchange="setChange()"></td>
    <td headers="col08">AAAAAA</td>
    <td headers="col09"><a href="/weboffice/dotationDelete.do?id=102">Supprimer</a></td>
    </tr>
    On voit bien que value est égale à l'id de mon composant.

  14. #14
    Membre confirmé Avatar de lextaz33
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2008
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2008
    Messages : 169
    Par défaut
    La différence avec tout les exemples que j'ai trouvé sur les forums est que j'utilise un ActionForm dynamique.

    Tout les exemples appelle la méthode getImpressionEtiquettes() du ActionForm quand j'uilise getStrings("impressionEtiquettes") du DynActionForm.

    C'est censé être la même chose non?

  15. #15
    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
    Effectivement, les valeurs sont bonnes.

    Personnellement, je n'utilise jamais les ActionForm dynamiques mais il n'y a pas de raison que ça ne fonctionne pas avec.

    As-tu plusieurs Actions liées au form-bean dotationForm définies dans le struts-config.xml ?
    Si oui, assure-toi que le scope soit bien égal à session dans le mapping de toutes ces Actions.

    Et sinon, après avoir regardé le code html généré, je vois que tu fais appel à une Action après un clic sur un lien.
    Est-ce dans cette Action-là que tu essaies de récupérer les valeurs des checkbox cochées ?
    Parce que si c'est le cas, le formulaire n'étant pas soumis lors d'un clic sur un lien, il est normal que toutes les valeurs soient égales à null.

  16. #16
    Membre confirmé Avatar de lextaz33
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2008
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2008
    Messages : 169
    Par défaut
    Alors, oui j'ai plusieurs action liés au form-bean dotationForm mais le scope est bien à session dans le mapping de toutes ces actions.

    Par contre l'action appelé pour récupérer les checkbox et différente de l'action de submit du formulaire.
    Donc l'erreur vient de la?

    le code de la JSP:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <html:form action="dotationSave">
     
    <% String urlPrint = "location.href='" + request.getContextPath() + "/dotationImpressionEtiquette.do'"; %>
     
    <html:submit><bean:message key="button.valid" /></html:submit>
     
    <html:button property="" onclick="<%= urlPrint %>"><bean:message key="preparation.details.printLabel"/></html:button>
     
    </html:form>
    Le formulaire est soumis par l'action dotationSave et mon impression ou je récupère les checkbox est soumis par l'action dotationImpressionEtiquette.

  17. #17
    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
    Oui, le problème vient bien de là.
    Il faut soumettre le formulaire si tu veux pouvoir récupérer les valeurs des checkbox cochées.
    Il faudrait donc utiliser un bouton submit.
    Comme tu as plusieurs actions dans le même formulaire, tu aurais je pense intérêt à utiliser une DispatchAction ou une LookupDispatchAction comme indiqué dans la FAQ.

  18. #18
    Membre confirmé Avatar de lextaz33
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2008
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2008
    Messages : 169
    Par défaut
    D'accord...
    Pas d'autre solutions que le dispatchAction?

  19. #19
    Membre confirmé Avatar de lextaz33
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2008
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2008
    Messages : 169
    Par défaut
    Je veu dire dans cette JSP, je fais appel à 4 actions.
    Le save du formulaire.
    Une action Init via un button
    Une action delete via un link.

    Et maintenant l'action d'impression via un button.

    C'est juste le fait d'appeler dotationForm.getStrings() qui ne peut pas fonctionner?

  20. #20
    Membre confirmé Avatar de lextaz33
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2008
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2008
    Messages : 169
    Par défaut
    Dernière question:
    Pourquoi je récupère toutes les autres propriétés de mon dotationForm mais pas la propriété des checkbox?

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

Discussions similaires

  1. Html:checkbox erreur dans les données listées
    Par fedora8 dans le forum Servlets/JSP
    Réponses: 0
    Dernier message: 03/05/2014, 16h55
  2. [HTML][checkbox] valider par défault
    Par hutchuck dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 28/11/2005, 11h44
  3. [HTML] Checkbox et Input text
    Par MYster dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 25/11/2005, 11h15
  4. [struts][debutant]input checkbox vs html checkbox
    Par venegan dans le forum Struts 1
    Réponses: 2
    Dernier message: 19/08/2005, 16h23
  5. html:checkbox gache tout
    Par cbi1net dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 12/08/2005, 11h02

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