Bonjour,
J'ai une table éditable en mode cellule. J'ai également un rowStyleClass qui colore ou non une ligne en fonction d'un boolean.
Tout fonctionne très bien lorsque j'affiche les données.
Par contre, j'aimerais que, quand je modifie le boolean d'une ligne, celle-ci se colore ou décolore directement après la modification, sans devoir recharger la liste.
Voici ma table en question :
Et la méthode d'enregistrement :
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 <p:dataTable id="heures" value="#{controleHeuresMandatForm.listHeures}" widgetVar="heureTable" var="heure" rowStyleClass="#{heure.tarifTemps ? 'rowColorOrange' : null}" rowKey="#{heure.id}" editable="true" editMode="cell" emptyMessage="#{msg['AucuneSaisieAAfficher']} - #{msg['AvezVousBienRenseigneLesChampsDeRecherche']}" > <p:ajax event="cellEdit" listener="#{controleHeuresMandatForm.enregistrerModification}" update="controleHeuresMandatForm:heures" /> <p:column headerText="#{msg['Description']}" style="width:20%"> <p:cellEditor> <f:facet name="output"> <h:outputText value="#{heure.description}" /> </f:facet> <f:facet name="input"> <p:inputText value="#{heure.description}" style="width:96%" label="Description" /> </f:facet> </p:cellEditor> </p:column> <p:column headerText="#{msg['AbregeTarifTemps']}" styleClass="columnCenter" style="width:3%"> <p:cellEditor> <f:facet name="output"> <h:outputText value="#{heure.typeTarifTempsCi.nom}" /> </f:facet> <f:facet name="input"> <p:selectOneMenu id="tarifTemps" required="true" value="#{heure.typeTarifTempsCi}" style="width:40px" > <f:selectItems value="#{controleHeuresMandatForm.listTypeTarifTemps}" /> <p:ajax event="blur" update="@this" /> </p:selectOneMenu> </f:facet> </p:cellEditor> </p:column> </p:dataTable>
Je fais bien un update de la table dans l'event cellEdit, mais rien ne se passe.
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 public void enregistrerModification(CellEditEvent event) { try { DataTable table = (DataTable) event.getSource(); Heure heure = (Heure) table.getRowData(); if (heure.getMandat() != null && heure.getDate() != null) { if (CollectionUtils.isNotEmpty(heure.getMandat().getListMandatIdentite()) && heure.getMandat().getListMandatIdentite().size() == 1) { heure.setMaitreOuvrage(heure.getMandat().getListMandatIdentite().get(0).getIdentite()); } heure.setTarifTemps(TypeValeurBooleanCi.OUI == heure.getTypeTarifTempsCi()); m_heureService.saveHeure(heure); // Calcul les totaux d'heures calculerTotauxHeures(heure); } else { FacesContext.getCurrentInstance().addMessage( null, new FacesMessage(FacesMessage.SEVERITY_ERROR, Messages .getMessage("MandatEstObligatoire", null) .getDetail(), "")); } chargerListeHeures(); } catch (Exception e) { FacesContext.getCurrentInstance().addMessage( null, new FacesMessage(FacesMessage.SEVERITY_ERROR, Messages .getMessage("ImpossibleDEnregistrerLaSaisie", null) .getDetail() + " : ", "")); FacesContext.getCurrentInstance().addMessage( null, new FacesMessage(FacesMessage.SEVERITY_ERROR, e.getCause() .getMessage(), "")); } }
J'ai également essayé de mettreà la fin de ma méthode d'enregistrement mais sans succès.
Code : Sélectionner tout - Visualiser dans une fenêtre à part Ajax.update("controleHeuresMandatForm:heures");
Qqun a-t-il une idée ?
Merci pour votre aide
Partager