[Primefaces] Mettre à jour une table sur un event rowSelect
Bonjour,
je souhaiterais mettre à jour une deuxième table basée sur la sélection d'une ligne dans une première table.
J'ai beau débugger, je vois bien mes beans mis à jour quand je sélectionne une ligne, et les getter bien appelés, la table n'est pas mise à jour.
J'ai un formulaire pour lequel cela fonctionne bien, mais pas la table.
Voici le code
Première table sur laquelle la selection est faite.
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
| <ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html" xmlns:p="http://primefaces.org/ui">
<h:form id="memberTableForm" prependId="false">
<p:dataTable var="member" value="#{membersTable.members}" filteredValue="#{membersTable.filteredMembers}" widgetVar="membersTableVar" scrollable="true" scrollHeight="1%" tableStyle="width:98%" selectionMode="single" selection="#{membersTable.selectedMember}"
rowKey="#{member}">
<p:ajax event="rowSelect" listener="#{membersTable.onRowSelect}" update="@([id$=memberFormId], [id$=memberAbonnements])" />
<p:column headerText="#{messages['NUMERO.MEMBRE']}">
<h:outputText value="#{member.memberNumber}" />
</p:column>
<p:column headerText="#{messages['NOM']}" filterBy="#{member.name}" filterMatchMode="startsWith">
<h:outputText value="#{member.name}" />
</p:column>
<p:column headerText="#{messages['PRENOM']}" filterBy="#{member.firstname}" filterMatchMode="startsWith">
<h:outputText value="#{member.firstname}" />
</p:column>
<p:column headerText="#{messages['ADRESSE']}">
<h:outputText value="#{member.address}" />
</p:column>
<p:column headerText="#{messages['VILLE']}">
<h:outputText value="#{member.postalCode} #{member.city}" />
</p:column>
<p:column headerText="#{messages['TELEPHONE']}">
<h:outputText value="#{member.phone}" />
</p:column>
<f:facet name="footer">
<h:outputText value=" " />
</f:facet>
</p:dataTable>
</h:form>
</ui:composition> |
et la deuxième table sur laquelle aucune mise à jour n'est faite
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
| <ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html" xmlns:p="http://primefaces.org/ui">
<h:form id="memberAbonnements" prependId="false">
<p:dataTable var="abonnement" value="#{memberAbonnement.abonnements}" scrollable="true" scrollHeight="1%" tableStyle="width:98%" selectionMode="single" selection="#{membersTable.selectedMember}"
rowKey="#{abonnement}">
<!-- <p:ajax event="rowSelect" listener="#{membersTable.onRowSelect}" update=":masterTabView:memberForm" /> -->
<p:column headerText="#{messages['SAISON']}">
<h:outputText value="#{abonnement.saison.id}" />
</p:column>
<p:column headerText="#{messages['BLOC']}">
<h:outputText value="#{abonnement.blocId.blocValue}" />
</p:column>
<p:column headerText="#{messages['RANG']}">
<h:outputText value="#{abonnement.rang}" />
</p:column>
<p:column headerText="#{messages['PLACE']}">
<h:outputText value="#{abonnement.place}" />
</p:column>
<p:column headerText="#{messages['REDUCTION']}">
<h:outputText value="#{abonnement.reduction}" />
</p:column>
<p:column headerText="#{messages['PAYE']}">
<p:selectBooleanCheckbox value="#{abonnement.paye}" />
</p:column>
<p:column headerText="#{messages['ACOMPTE']}">
<h:outputText value="#{abonnement.acompte}" />
</p:column>
<p:column headerText="#{messages['PLACE.COMMANDEE']}">
<h:outputText value="#{abonnement.placeCommandee}" />
</p:column>
<f:facet name="footer">
<h:outputText value=" " />
</f:facet>
</p:dataTable>
</h:form>
</ui:composition> |
Le bean de la première table
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 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
| package standardNaast.beans;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import javax.annotation.PostConstruct;
import org.primefaces.event.SelectEvent;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import standardNaast.entities.Abonnement;
import standardNaast.entities.Personne;
import standardNaast.service.PersonneService;
@Controller("membersTable")
@Scope("session")
public class MembersTableBean implements Serializable {
private static final long serialVersionUID = 7614568701955199215L;
private List<Personne> members = new ArrayList<>();
private List<Personne> filteredMembers = new ArrayList<>();
private Personne selectedMember;
private List<Abonnement> abonnements;
@Autowired
private MemberAbonnementBean memberAbonnementBean;
@Autowired
private MemberFormBean memberForm;
@Autowired
private PersonneService personneService;
@PostConstruct
public void init() {
System.out.println("Initializing MembersTableBean");
List<Personne> findAllPerson = this.personneService.findAllPerson();
Collections.sort(findAllPerson);
this.members = findAllPerson;
this.filteredMembers = findAllPerson;
}
public List<Personne> getMembers() {
return this.members;
}
public List<Personne> getFilteredMembers() {
return this.filteredMembers;
}
public void setFilteredMembers(final List<Personne> filteredMembers) {
this.filteredMembers = filteredMembers;
}
public Personne getSelectedMember() {
return this.selectedMember;
}
public void setSelectedMember(final Personne selectedMember) {
this.selectedMember = selectedMember;
this.setAbonnements(this.getSelectedMember().getAbonnementList());
}
public void onRowSelect(final SelectEvent event) {
this.memberForm.setPersonne(this.getSelectedMember());
this.memberAbonnementBean.setAbonnements(this.getAbonnements());
}
public List<Abonnement> getAbonnements() {
return this.abonnements;
}
public void setAbonnements(final List<Abonnement> abonnements) {
this.abonnements = abonnements;
}
} |
Et le code du deuxième bean
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
| package standardNaast.beans;
import java.io.Serializable;
import java.util.List;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import standardNaast.entities.Abonnement;
@Controller("memberAbonnement")
@Scope("session")
public class MemberAbonnementBean implements Serializable {
private static final long serialVersionUID = 423300322596970656L;
private List<Abonnement> abonnements;
public List<Abonnement> getAbonnements() {
return this.abonnements;
}
public void setAbonnements(final List<Abonnement> abonnements) {
this.abonnements = abonnements;
}
} |
Le setter et getter du deuxième bean est bien appelé. Quand je débugge je vois bien que le getAbonnements() est bien appelé via org.primefaces.component.datatable.DataTable.getValue()
--> Voilà je suis bloqué là. :?
Merci d'avance pour votre aide.