Bonjour,
J'ai une datatable en édition de ligne.
Voici ce que j'aimerais faire :
- lorsque je valide une saisie, j'enregistre la ligne modifiée et j'ajoute une nouvelle ligne qui vient automatiquement un édition
Pour ce faire j'ai déclaré l'event suivant pour enregistrer la ligne modifiée lorsque l'on clique pour valider la modification et automatiquement mettre la dernière ligne de la table en édition :
Dans mon backingBean, j'enregistre la modification et ajoute une nouvelle ligne à la liste des éléments de la table :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 <p:ajax event="rowEdit" listener="#{saisirHeuresForm.enregistrerModification}" update="saisirHeuresForm:totauxHeures" oncomplete="jQuery('#saisirHeuresForm\\:heures .ui-datatable-data > tr').last().find('span.ui-icon-pencil').click(); $(function(){PrimeFaces.focus('saisirHeuresForm:heures');});" />
J'ai bien essayé de faire appel à RequestContext pour mettre ensuite à jour la table, mais sans succès :
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
47
48
49
50
51
52
53
54 public void enregistrerModification(RowEditEvent event) { try { Heure heure = (Heure) event.getObject(); calculerTotaux(heure); 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 heureSaved = m_heureService.saveHeure(heure); if (!heureSaved.getDate().equals(getCurrentDate())) { listHeures = null; } else { // Remplace l'heure enregistrée dans la liste pour éviter le problème de modification concurrente int indexOf = listHeures.indexOf(heure); listHeures.remove(heure); // On recharge la liste en fonction de la date de la saisie (au cas ou l'utilisateur aurait changé la date) listHeures.add(indexOf, heureSaved); } // Calcul les totaux d'heures calculerTotauxHeures(); Heure heure2 = new Heure(); heure2.setDate(currentDate.toDate()); heure2.setEmploye(currentEmploye); listHeures.add(heure2); RequestContext.getCurrentInstance().update("saisirHeuresForm:heures"); } else { FacesContext.getCurrentInstance().addMessage( null, new FacesMessage(FacesMessage.SEVERITY_ERROR, Messages .getMessage("MandatEstObligatoire", null) .getDetail(), "")); } } 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(), "")); }
A noter aussi que si j'ajoute la table dans la sélection des composants à mettre à jour lors de l'event d'édition, ça ne marche pas, contrairement à la 2ème table de mon formulaire :
Code : Sélectionner tout - Visualiser dans une fenêtre à part RequestContext.getCurrentInstance().update("saisirHeuresForm:heures");
Qqun a-t-il une idée comment mettre à jour cette table ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 <p:ajax event="rowEdit" listener="#{saisirHeuresForm.enregistrerModification}" update="saisirHeuresForm:heures saisirHeuresForm:totauxHeures" oncomplete="jQuery('#saisirHeuresForm\\:heures .ui-datatable-data > tr').last().find('span.ui-icon-pencil').click(); $(function(){PrimeFaces.focus('saisirHeuresForm:heures');});" />
Merci pour votre aide
Partager