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 : cocher checkbox au chargement de la page


Sujet :

Struts 1 Java

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 4
    Points : 1
    Points
    1
    Par défaut [Struts-Layout] Collection : cocher checkbox au chargement de la page
    Bonjour à tous,

    J'utilise actuellement un tag du type layout:collection pour afficher une liste, avec une checkbox sur chaque ligne pour pouvoir la sélectionner. J'ai vu plusieurs sujet sur le site traitant de ça, mais aucun ne m'a aidé pour mon problème.

    Mon problème c'est que j'aimerais pouvoir cocher les checkbox de certaines lignes au chargement de la page. Pour le moment, la liste s'affiche bien, les checkbox sont là, et je peux les sélectionner. Mais je ne vois pas comment faire pour automatiser la sélection dans l'action init de mon ActionForm. Y a-t-il une technique particulière pour ça ?

    Merci d'avance pour votre aide.

  2. #2
    Membre confirmé

    Inscrit en
    Juin 2005
    Messages
    1 155
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 1 155
    Points : 475
    Points
    475
    Par défaut
    de certaines lignes au chargement de la page
    Lesquelles ?
    Ton form contient une liste de beans j'imagine ?
    Peux t on voir à quoi ils ressemblent ?

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Merci pour ta réponse.

    Alors, j'ai bien une liste de bean dans mon Form :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    private Collection allEntries = new ArrayList();
    public void setAllEntries(Collection allEntries) {
    	this.allEntries = allEntries;
    }
    public Collection getAllEntries() {
    	return allEntries;
    }
    J'ai également une seconde liste de bean du même type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public Collection entries = new ArrayList();
    Avec getter & setter également, et cette liste contient les éléments à cocher dans mon autre liste. Je ne vois pas cependant comment faire le lien entre les deux.

  4. #4
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    J'ai un début de solution. Je crée une liste selection dans mon Form :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    private String[] selection;
     
    public void setSelection(String[] selection) {
    	this.selection = selection;
    }
    public String[] getSelection() {
    	return selection;
    }
    public void setSelection(int index, String selection) {
    	this.selection[index] = selection;
    }
    public String getSelection(int index) {
    	return selection[index];
    }
    J'initialise cette liste dans mon Action en lui donnant les ids de mes objets à sélectionner :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for(Object o : monForm.getEntries()) {
    	MonBean bean = (MonBean)o;
    	selection[i++] = bean.getId();
    }
    monForm.setSelection(selection);
    Ma page contient le tag suivant afin d'afficher la liste :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <layout:collection selectIndex="entriesId" selectName="selection" property="allEntries" selectProperty="id" selectType="checkbox">
    	<layout:collectionItem property="title" />
    	<layout:collectionItem property="content" />
    </layout:collection>
    L'initialisation de la page se passe correctement, et si selection contient des éléments, les checkbox sont bien cochées. Cependant, lors de la validation de la page, j'obtiens l'erreur suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    java.lang.NullPointerException
    	monappli.form.MonForm.getSelection(MonForm.java:176)
    Sans doute un problème de portée de la variable selection, qui est en scope="request". Mais comment résoudre ça (sans passer en scope="session" qui me rend une autre erreur encore moins commode) ?

  5. #5
    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
    Quand le form-bean est dans le scope request, lorsque tu soumets le formulaire, le form-bean est réinstancié et le tableau de String selection est null, vu qu'il n'est pas initialisé dans l'ActionForm :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private String[] selection;
    ce qui explique l'exception NullPointerException.

    Je suppose que la taille de la collection n'est pas fixe, sinon tu aurais pu mettre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private String[] selection = new String[tailledelacollection] ;
    Et si tu mets :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private String[] selection = new String[0] ;
    tu vas sans doute avoir une exception IndexOutOfBoundsException.

    Donc, le plus simple est de mettre le scope du form-bean à session.

    Peux-tu préciser quelle erreur tu obtiens avec le scope à session ?

  6. #6
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Hum, je ne vais pas mettre pas toute la stack trace ici, mais voici les principaux messages :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    javax.servlet.ServletException: BeanUtils.populate
    	at org.apache.struts.util.RequestUtils.populate(RequestUtils.java:475)
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    java.lang.IllegalArgumentException: No bean specified
    	at org.apache.commons.beanutils.PropertyUtilsBean.getPropertyDescriptor(PropertyUtilsBean.java:874)
    Il n'y a pas de lien visible avec mes fichiers. En attendant, j'ai trouvé une solution bricolage : comme l'erreur arrivait à l'envoi du formulaire, je m'occupe de l'attribut selection uniquement à l'initialisation de la page pour cocher les checkbox, pas pour les récupérer après l'envoi. Je les récupère manuellement via request.getParameter(...). Pas sûr que ça soit très propre, je suis même plutôt sûr que ça ne l'est pas...

  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
    Le plus simple serait de faire ce que struts a prévu, utiliser la méthode reset de l'ActionForm pour initialiser l'objet selection en fonction de la taille de la liste de valeur. Ensuite, le transfert se fait tout seul.
    A vrai dire, la solution de c_nvy fonctionne bien, il faut juste la placer au bon endroit.
    (ou alors, je n'ai pas compris ton problème... c'est envisageable )

Discussions similaires

  1. [Struts-Layout] Collection avec des checkbox
    Par valkeke dans le forum Struts 1
    Réponses: 6
    Dernier message: 12/12/2009, 12h20
  2. [Struts:Layout] collection de checkbox
    Par Roievil dans le forum Struts 1
    Réponses: 10
    Dernier message: 26/01/2009, 16h50
  3. Réponses: 5
    Dernier message: 21/11/2008, 16h46
  4. [Struts-Layout] collection et checkbox
    Par khayri dans le forum Struts 1
    Réponses: 14
    Dernier message: 03/05/2007, 12h19
  5. [Struts-Layout] layout:collection et checkbox
    Par Mayhem dans le forum Struts 1
    Réponses: 10
    Dernier message: 01/11/2006, 00h59

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