[PF-datatable] Colorer une ligne après édition de cellule
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 :
Code:
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> |
Et la méthode d'enregistrement :
Code:
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(), ""));
}
} |
Je fais bien un update de la table dans l'event cellEdit, mais rien ne se passe.
J'ai également essayé de mettre
Code:
Ajax.update("controleHeuresMandatForm:heures");
à la fin de ma méthode d'enregistrement mais sans succès.
Qqun a-t-il une idée ?
Merci pour votre aide