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 :
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 <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>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.
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); }
Quelqu'un saurait-il m'expliquer comment faire ?
Merci d'avance pour votre aide.
Partager