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 html : 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
<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 html : 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
<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 java : 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
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 java : 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
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.