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 :

[JSF2 / PrimeFaces] Modifier dataTable programmatiquement


Sujet :

JSF Java

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2012
    Messages : 59
    Points : 41
    Points
    41
    Par défaut [JSF2 / PrimeFaces] Modifier dataTable programmatiquement
    Bonjour,

    J'ai une dataTable que j'aimerais modifier par code.
    Cette dataTable contient des checkbox dans une colonne, quelques-unes sont désactivées (pas de problème jusqu'ici) mais les autres qui sont activées, j'aimerais qu'une seule checkbox au plus soit cochée.
    Autrement dit, si l'utilisateur coche une checkbox, alors s'il en avait déjà coché une autre avant, cette dernière doit se décocher.

    Alors pour faire ça voilà mon code :
    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
    <p:dataTable  var="car" style="width: 270px;margin-top:  15px;margin-left: 60px" binding="#{editCommandController.hd}"  value="#{editCommandController.lp}" id="carList" editable="true">  
     
        <f:facet name="header">  
            Stock Papiers
        </f:facet>  
     
        <p:column headerText="Libéllé" style="width:70px">                                
            <h:outputText value="#{car.libelle}" style="width: 70px;" label="Year"/>                                  
        </p:column>  
     
        <p:column headerText="Stock" style="width:40px">                            
            <h:outputText value="#{car.stock}"  label="Year"/>                        
        </p:column>
     
        <p:column headerText="Choisir" style="width:40px;margin: auto;">      
             <p:selectBooleanCheckbox  id="karim"  binding="#{editCommandController.tmp}" value="#{car.checked}"  disabled="#{editCommandController.result gt car.stock}" >
                <p:ajax  listener="#{editCommandController.checkListener}"/>
            </p:selectBooleanCheckbox>
     
        </p:column>
     
    </p:dataTable>
    Le ManagedBean
    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
    44
    45
    46
        private org.primefaces.component.datatable.DataTable hd;
     
        public org.primefaces.component.datatable.DataTable getHd() {
            return hd;
        }
     
        public void setHd(org.primefaces.component.datatable.DataTable hd) {
            this.hd = hd;
        }
     
        public void checkListener(AjaxBehaviorEvent e) {
            System.out.println("je suis "+e.getComponent().getClientId()+" utilisé : et tmp :" );
     
             List<Papier> lp1;
            lp1 = new ArrayList();
             lp1 = (List<Papier>) getHd().getValue();
           // getHd().se
             System.out.println("lp1.size() : "+lp1.size());
             Boolean a = true;
             System.out.println("ce bool a = "+a);
            for(int i = 0 ; i< lp1.size();i++){
               System.out.println("alors le cheched est : "+lp1.get(i).getChecked());
               if(lp1.get(i).getChecked()){
                   if(lastChecked != null){                   
                       for(int j = 0;j<lp1.size();j++){
                           if(lp1.get(j).getId().equals(lastChecked)){
                               lp1.get(j).setChecked(false);
                               break;
                           }
                       }
                       lastChecked = lp1.get(i).getId();
                   }else{
                       lastChecked = lp1.get(i).getId();
                   }
               }
            }
             System.out.println("avant d'affecter voila ce quilya : ");
              for(int i = 0 ; i< lp1.size();i++){
                  System.out.println("alors le cheched n "+i+" est : "+lp1.get(i).getChecked());
                }
     
              org.primefaces.component.datatable.DataTable editdt = new DataTable();
              editdt.setValue(lp1);
              setHd(editdt);
            //getHd().setValue(lp1);
        }
    J'ai utilisé l'attribut binding pour lier la dataTable avec un composant dans le ManagedBean mais les modifications que j'ai faites dans la méthode ci-dessus n'apparaissent pas dans la dataTable. Je ne sais pas pourquoi.

    Quelqu'un saurait-il m'expliquer comment faire ?

    Merci d'avance pour votre aide.

  2. #2
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Septembre 2012
    Messages : 9
    Points : 12
    Points
    12
    Par défaut
    j'aimerais qu'une seule checkbox au plus soit cochée.
    Autrement dit, si l'utilisateur coche une checkbox, alors s'il en avait déjà coché une autre avant, cette dernière doit se décocher.
    Pourquoi t'as pas essayé avec un bouton radio : <h:selectOneRadio

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2012
    Messages : 59
    Points : 41
    Points
    41
    Par défaut
    le bouton radio est statique : je dois englober tous les radio boutons dans un seul comme ci dessous :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <p:selectOneRadio id="options" value="#{formBean.number}">  
                <f:selectItem itemLabel="Option 1" itemValue="1" />  
                <f:selectItem itemLabel="Option 2" itemValue="2" />  
                <f:selectItem itemLabel="Option 3" itemValue="3" />  
            </p:selectOneRadio>
    et moi j'ai les checkbox dans le datatable, un checkbox est generé pour chaque ligne

  4. #4
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Septembre 2012
    Messages : 9
    Points : 12
    Points
    12
    Par défaut
    le bouton radio est statique :

    Mais tu peux le rendre dynamique !! voila un exemple :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    <p:selectOneRadio    id="options"  >
       <f:selectItems value="#{managerBean.itemsSelectOne}"/>
    </p:selectOneRadio>
    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
     
     
    ....
    import javax.faces.model.SelectItem;
     
    @ManagedBean(name = "managerBean")
    @SessionScoped
    public class ManagerBean implements Serializable {
    ....
     
     
     
    public SelectItem[] getItemsSelectOne() {
     
    	List<Bean> entities = .....// à tois de compléter 
     
    	int size = entities.size();
            SelectItem[] items = new SelectItem[size];
            int i = 0;
     
            for (Object x : entities) {
                items[i++] = new SelectItem(x, x.toString());// x.toString est la valeur du label(au lieu de itemLabel dans la balise <f:selectItems) 
            }
            return items;
    }
     
     
    ....

  5. #5
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2008
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 162
    Points : 255
    Points
    255
    Par défaut
    Sur le site de Primefaces un exemple est donnée avec des boutons radios, et il y a bien un bouton de généré pour chaque ligne.

    Voici le lien.
    La forme même des pyramides prouve que l'être humain tend à en faire de moins en moins.

Discussions similaires

  1. JSF2 - PrimeFaces gallerie photos
    Par ghiwani80 dans le forum JSF
    Réponses: 6
    Dernier message: 29/01/2013, 13h18
  2. [Primefaces] Modifier HashMap via Datatable
    Par Joffrey H dans le forum JSF
    Réponses: 0
    Dernier message: 14/11/2012, 16h47
  3. Réponses: 1
    Dernier message: 06/09/2012, 21h07
  4. Demande d'info sur la redirection JSF2 Primefaces
    Par ragnarok_mikimouse dans le forum JSF
    Réponses: 7
    Dernier message: 21/06/2012, 13h07
  5. Réponses: 2
    Dernier message: 04/05/2012, 16h50

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