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

JSF Java Discussion :

problème h:selectManyCheckbox avec h:dataTable


Sujet :

JSF Java

  1. #1
    Membre régulier
    Inscrit en
    Mars 2006
    Messages
    227
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 227
    Points : 109
    Points
    109
    Par défaut problème h:selectManyCheckbox avec h:dataTable
    Je voudrais utiliser un selectManyChekbox à l'intérieur d'un h:dataTable, le code suivant permet de faire l'affichage de ma page
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <h:dataTable value="#{optionSupplementaireController.items}" var="item" border="0" cellpadding="2" cellspacing="0" rowClasses="jsfcrud_odd_row,jsfcrud_even_row" rules="all" style="border:solid 1px">
                            <h:column>
                                <f:facet name="header">
                                    <h:outputText value=""/>
                                </f:facet>
                                <h:selectManyCheckbox value="#{optionSupplementaireController.optionIds}">
                                    <f:selectItem itemValue="#{item.id}" itemLabel=""/>
                                </h:selectManyCheckbox>
                            </h:column>
    la propriété optionIds en gras renvois une liste d'objets de type long et permet de stocker les identifiants de la classe Option. Au niveau du rendu html tout se passe bien, quand je sélectionne plus d'une Option(coche deux lignes) et fait appel à la méthode addActivite() codée comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public String addActivites() {
            Activite activite = (Activite) JsfUtil.getSessionController("activiteController").getCurrent();
            for (Iterator iter = getOptionIds().iterator(); iter.hasNext();) {
                OptionSupplementaire option = ejbFacade.find(new Long((String)iter.next()));
                option.addActivites(activite);
            }
            return "Activite";
        }
    Je me rend compte que la méthode getOptionIds() ne contient que un seul élément. Quelqu'un saurait me dire si j'ai oublié quelque chose dans l'utilisation des composants h:dataTable avec h:selectManyCheckbox.
    Merci d'avance.

  2. #2
    Membre régulier
    Inscrit en
    Mars 2006
    Messages
    227
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 227
    Points : 109
    Points
    109
    Par défaut
    Je ne sais si quelqu'un a déjà réussit à utiliser les selectManycheckbox à l'intérieur d'un dataTabel, mais cela devient urgent et j'aurai besoin d'un petit coup de main. Pour savoir comment s'y prendre pour que lorsque l'on sélectionne plus d'une valeur il puisse les mémoriser.

  3. #3
    Membre averti Avatar de Shinzul
    Homme Profil pro
    Lecteur assidu de code source
    Inscrit en
    Janvier 2008
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Lecteur assidu de code source
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2008
    Messages : 174
    Points : 333
    Points
    333
    Par défaut
    Ton problème viens du fait que chaque composant est appelé indépendamment et va set la valeur. Donc en fait toutes tes valeurs sont bien prises en compte lors d'une sélection multiple mais elles s'écrasent.

    Pour pouvoir stocker plusieurs valeurs on peut stocker une liste ou chaque composant ciblera un indice de cette liste ou alors s'inspirer de la discussion suivante .

    La solution posé est celle à base de map et plus loin celle d'un bean intermédiaire.

    A toi d'adapter de choisir la solution qui te conviens le mieux.
    N'oubliez pas le quand vous avez votre solution.

  4. #4
    Rédacteur
    Avatar de romaintaz
    Homme Profil pro
    Java craftsman
    Inscrit en
    Juillet 2005
    Messages
    3 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Points : 7 275
    Points
    7 275
    Par défaut
    Bon, autant le dire : la gestion des checkboxes et radio boutons en JSF est tout à fait pourrie !
    Autant ça passe quand on veut les utiliser en un bloc, autant ça devient vite chaotique dès que l'on souhaite séparer ces éléments dans la page, comme dans ton cas, dans les lignes d'un tableau.

    En gros, pour expliquer autrement, si ta table a 5 lignes, tu n'as pas un groupe de 5 cases à cocher, mais en réalité 5 groupes de une case à cocher. Du coup, cela explique la situation que tu rencontres.

    Alors comment faire ? Il n'y a pas de solutions simples, à ma connaissance. J'ai quelques pistes : la plus simple serait d'utiliser le composant <t:checkbox> (avec un <t:selectManyCheckbox layout="spread"/>) proposé par Tomahawk, qui te permet ainsi de positionner tes checkboxes où bon te semble.

    Une autre solution est d'utiliser un composant dataTable plus sophistiqué proposé par Richfaces, Primefaces, etc. et qui offre nativement la sélection des lignes, et ainsi éviter de le faire soi-même.

    Enfin, d'autres solutions seraient de manipuler la page HTML avec du JavaScript, d'utiliser un <h:inputHidden/> qui serait rempli par du JavaScript lié à des <input type="checkbox"/> en "HTML natif", ou encore de créer son propre composant JSF !
    Nous sommes tous semblables, alors acceptons nos différences !
    --------------------------------------------------------------
    Liens : Blog | Page DVP | Twitter
    Articles : Hudson | Sonar | Outils de builds Java Maven 3 | Play! 1 | TeamCity| CitConf 2009
    Critiques : Apache Maven

  5. #5
    Membre averti Avatar de Shinzul
    Homme Profil pro
    Lecteur assidu de code source
    Inscrit en
    Janvier 2008
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Lecteur assidu de code source
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2008
    Messages : 174
    Points : 333
    Points
    333
    Par défaut
    Ah oui effectivement, je suis pas familier avec toutes les librairies de composants mais la solution de romaintaz sera surement plus simple que la mienne.

    Et je +1 le fait que la gestion des radio bouton et des checkbox soit pourri .
    N'oubliez pas le quand vous avez votre solution.

  6. #6
    Rédacteur
    Avatar de romaintaz
    Homme Profil pro
    Java craftsman
    Inscrit en
    Juillet 2005
    Messages
    3 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Points : 7 275
    Points
    7 275
    Par défaut
    Cela dit, la solution d'utiliser une Map<Object, Boolean>, comme expliqué dans l'autre thread peut être intéressante, je n'y avait pas pensé (reste à voir si cela fonctionne bien).
    Nous sommes tous semblables, alors acceptons nos différences !
    --------------------------------------------------------------
    Liens : Blog | Page DVP | Twitter
    Articles : Hudson | Sonar | Outils de builds Java Maven 3 | Play! 1 | TeamCity| CitConf 2009
    Critiques : Apache Maven

  7. #7
    Membre régulier
    Inscrit en
    Mars 2006
    Messages
    227
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 227
    Points : 109
    Points
    109
    Par défaut
    Merci pour vos réponses je dois avoué que j'ai longtemps hésiter avant de basculer sur richFaces vu que mon projet est de petite taille mais j'ai fini par le faire, après avoir essayer le composant richdataTable le problème reste le même. Il y a t-il une propriété à paramétrer pour qu'il tienne compte des sélections multiples?

  8. #8
    Membre averti Avatar de Shinzul
    Homme Profil pro
    Lecteur assidu de code source
    Inscrit en
    Janvier 2008
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Lecteur assidu de code source
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2008
    Messages : 174
    Points : 333
    Points
    333
    Par défaut
    La dataTable de richFaces te permet de faire plus de chose sur le composant mais ton problème ne vien pas vraiment du composant de table en lui même mais des composants de sélection checkbox.

    Regarde par rapports aux solution qu'on t'as proposé au dessus pour lié chaque checkbox vers un attribut différents.
    N'oubliez pas le quand vous avez votre solution.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 18/02/2015, 23h15
  2. Problème avec une DataTable
    Par ahmedpa dans le forum JSF
    Réponses: 8
    Dernier message: 17/05/2012, 00h11
  3. Problème avec "rich:dataTable"
    Par st0rm dans le forum JSF
    Réponses: 4
    Dernier message: 13/01/2010, 13h36
  4. Problème de chargement de données avec mon dataTable
    Par sobjp2025 dans le forum Windows Forms
    Réponses: 1
    Dernier message: 30/04/2009, 21h43
  5. petit problème avec un datatable
    Par ballantine's dans le forum Accès aux données
    Réponses: 1
    Dernier message: 28/04/2008, 22h57

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