Bonjour je développe une application avec JSF et JPA(Netbean6.5.1 et glasfishv2 et PostgreSQL 8.4.1 comme serveur de base de données). Je joins une partie de la db. Un customer peut être lié à plusieurs listes et inversement. un Customer peut être propriétaire ou bénéficiaire d'une liste.(désolais pour ce franglais).
Je fais une recherche des listes et j'aimerai afficher les champs suivants: Nom et Prénom de l'entity Customer, le type de l'entity Type, la date de événement et le statut de l'entity ListCadeaux. J'arrive à afficher tous les champs sauf ceux du Customer. Ca doit paraitre simple mais, mais je tourne en rond.
Quelqu'un a t-il une piste merci d'avance.
voici les entity
entity ListCadeaux
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 @Entity @Table(name = "t_customer") public class Customer implements Comparable, Serializable {//Comparable, //=========================== //= attributs = //=========================== @Id @GeneratedValue(strategy = GenerationType.SEQUENCE) private Long cust_id; @Column(name = "cust_first_name") private String first_name; @Column(name = "cust_last_name") private String last_name; @Column(name = "cust_email") private String email; @Column(name = "cust_pswd") private String password; //... @ManyToMany(mappedBy = "customers", cascade = CascadeType.PERSIST) @JoinTable(name = "t_cust_list", joinColumns = { @JoinColumn(name = "cust_id")}, inverseJoinColumns = { @JoinColumn(name = "list_id")}) private List<ListCadeaux> listscadeaux = new ArrayList<ListCadeaux>(); //... }
la joinTable(est-t elle bien représentée?
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 @Entity @Table(name = "t_list") public class ListCadeaux implements Serializable, Comparable { @Id @GeneratedValue(strategy = GenerationType.SEQUENCE) private Long list_id; @ManyToOne(fetch = FetchType.EAGER) @JoinColumn(name = "list_type_id") private Type type = new Type(); @Temporal(TemporalType.DATE) @Column(name = "list_creation_date") private Date creation_date; @Temporal(TemporalType.DATE) @Column(name = "list_event_date") private Date event_date; @Column(name = "list_av_amount") private Double av_amount = 0.0; @Column(name = "list_status") private String status;// en cours ou cloturée @ManyToMany private List<Customer> customers; //... })
le statless bean
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 @Entity @Table(name = "t_cust_list") public class CustList implements Comparable, Serializable { @Id @GeneratedValue(strategy = GenerationType.SEQUENCE) private Long cust_list_id; @ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY) @JoinColumn(name = "cust_id") private Customer customer = new Customer(); @ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY) @JoinColumn(name = "list_id") private ListCadeaux list_cadeaux = new ListCadeaux(); @OneToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY) @JoinColumn(name = "status_id") private Status status = new Status(); //... }
le contoller JSF
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
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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214 @Stateless public class ListCadeauxBean implements ListCadeauxRemote, ListCadeauxLocal { @PersistenceContext(unitName = "ListCadeaux_PU") private EntityManager em; //============================================================== //= methode publiques pour le client sur 1 liste de cadeaux = //============================================================== /** * * @param custlist * @return */ public ListCadeaux createList(ListCadeaux listcadeaux) { // On s'assure de la validité des paramètres if (listcadeaux == null) { throw new ValidationException("List object is null"); } em.persist(listcadeaux); return listcadeaux; } /** * find an object by his id * @param cust_list_id * @return */ public ListCadeaux findList(Long list_id) { // On s'assure de la validité des paramètres if (list_id == null) { throw new ValidationException("List id is invalid"); } ListCadeaux listcadeaux; // On recherche l'objet à partir de son identifiant listcadeaux = em.find(ListCadeaux.class, list_id); return listcadeaux; } /** * update afeter changing data * @param custlist * @return */ public ListCadeaux updateList(ListCadeaux listcadeaux) { // On s'assure de la validité des paramètres if (listcadeaux == null) { throw new ValidationException("CustList object is null"); } // On modifie l'objet de la base de données em.merge(listcadeaux); return listcadeaux; } /** * find the custlist with parameters * @param custlist * @return */ public List<ListCadeaux> searchLists(ListCadeaux listcadeaux) { Query query; List<ListCadeaux> list_s_cadeaux; String sWhere = ""; if (listcadeaux != null) { if (listcadeaux.getAv_amount() != 0) { if (sWhere.equals("")) { sWhere = " where av_amount like '%" + listcadeaux.getAv_amount() + "%'"; } else { sWhere = sWhere + " and av_amount like '% " + listcadeaux.getAv_amount() + " %'"; } } if (!listcadeaux.getStatus().equals("")) { if (sWhere.equals("")) { sWhere = " where status like '%" + listcadeaux.getStatus() + "%'"; } else { sWhere = sWhere + " and status like '% " + listcadeaux.getStatus() + " %'"; } } if (listcadeaux.getType().getType_name() != null) { if (sWhere.equals("")) { sWhere = " where t.type_name like '%" + listcadeaux.getType().getType_name()+ "%'"; } else { sWhere = sWhere + " and t.type_name like '% " + listcadeaux.getType().getType_name()+ " %'"; } } } //query = em.createQuery("SELECT cl FROM CustList cl JOIN cl.customer c JOIN cl.list_cadeaux lc" + sWhere);//JOIN cl.list_cadeaux lc query = em.createQuery("SELECT l FROM ListCadeaux l JOIN l.type t " + sWhere); list_s_cadeaux = query.getResultList(); return list_s_cadeaux; } /** * find the types * @param type * @return */ public List<Type> searchTypes(Type type) { Query query; List<Type> types; String sWhere = ""; if (type != null) { if (!type.getType_name().equals("")) { if (sWhere.equals("")) { sWhere = " where type_name like '%" + type.getType_name() + "%'"; } else { sWhere = sWhere + " and type_name like '%" + type.getType_name() + "%'"; } } } query = em.createQuery("SELECT t FROM Type t " + sWhere + " ORDER by t.type_name"); types = query.getResultList(); return types; } /** * delete the object from db * @param custlist */ public void deleteList(ListCadeaux listcadeaux) { em.remove(em.merge(listcadeaux)); } //============================================================== //= methode publiques pour le client sur 1 liste de cadeaux = //============================================================== public CustList createCustList(CustList custlist) { // On s'assure de la validité des paramètres if (custlist == null) { throw new ValidationException("custlist object is null"); } em.persist(custlist); return custlist; } public CustList findCustList(Long cust_list_id) { // On s'assure de la validité des paramètres if (cust_list_id == null) { throw new ValidationException("custlist id is invalid"); } CustList custlist; // On recherche l'objet à partir de son identifiant custlist = em.find(CustList.class, cust_list_id); return custlist; } public CustList updateCustlist(CustList custlist) { // On s'assure de la validité des paramètres if (custlist == null) { throw new ValidationException("CustList object is null"); } // On modifie l'objet de la base de données em.merge(custlist); return custlist; } public List<CustList> searchCustLists(CustList custlist) { Query query; List<CustList> custlits; String sWhere = ""; if (custlist != null) { if (custlist.getCustomer().getFirst_name().equals("")) { if (sWhere.equals("")) { sWhere = " where c.first_name like '%" + custlist.getCustomer().getFirst_name() + "%'"; } else { sWhere = sWhere + " and c.first_name like '% " + custlist.getCustomer().getFirst_name() + " %'"; } } if (custlist.getCustomer().getLast_name().equals("")) { if (sWhere.equals("")) { sWhere = " where c.last_name like '%" + custlist.getCustomer().getLast_name() + "%'"; } else { sWhere = sWhere + " and c.last_name like '% " + custlist.getCustomer().getLast_name() + " %'"; } } /*if (custlist.getCustomer().getEmail().equals("")) { if (sWhere.equals("")) { sWhere = " where c.email like '%" + custlist.getCustomer().getEmail() + "%'"; } else { sWhere = sWhere + " and c.email like '% " + custlist.getCustomer().getEmail() + " %'"; } }*/ /*if (custlist.getList_cadeaux().getType().getType_name().equals("")) { if (sWhere.equals("")) { sWhere = " where lc.t.type_name like '%" + custlist.getCustomer().getFirst_name() + "%'"; } else { sWhere = sWhere + " and c.first_name like '% " + custlist.getCustomer().getFirst_name() + " %'"; } }*/ /*if (custlist.getList_cadeaux().getStatus().equals("")) { if (sWhere.equals("")) { sWhere = " where lc.status like '%" + custlist.getList_cadeaux().getStatus() + "%'"; } else { sWhere = sWhere + " and lc.status like '% " + custlist.getList_cadeaux().getStatus() + " %'"; } }*/ } query = em.createQuery("SELECT cl FROM CustList cl JOIN cl.customer c JOIN cl.list_cadeaux lc" + sWhere);//JOIN cl.list_cadeaux lc custlits = query.getResultList(); return custlits; } public void deleteCustList(CustList custlist) { em.remove(em.merge(custlist)); } }
et le jsp pour finir
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
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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126 public class ListCadeauxController { //=========================================================== //= attributs = //=========================================================== @EJB private ListCadeauxLocal listCadeauxBean; private ListCadeaux ListRech = new ListCadeaux(); private ListCadeaux listDetail; private List<ListCadeaux> list_s_cadeaux; private CustList custlistRech = new CustList(); private CustList custlistDetail; private List<CustList> custlists; private Type type = new Type(); private List<Type> types; private Map typesCB; private PagingInfo pagingInfo = new PagingInfo(); //============================================================ //= methodes publiques pour la liste = //============================================================ /** * * @return */ public String doCreatList() { String goTo = null; ListRech = listCadeauxBean.createList(ListRech); goTo = "list.created"; return goTo; } /** * */ public String doFindList() { String goTo = null; listDetail = listCadeauxBean.findList(getParamId("list_id")); goTo = "list.displayed"; return goTo; } /** * */ public String doFindLists() { String goTo = null; list_s_cadeaux = listCadeauxBean.searchLists(ListRech); goTo = "lists.displayed"; return goTo; } /** * * @return */ public Map getAllTypes() { types = listCadeauxBean.searchTypes(null); if (typesCB == null) { typesCB = new TreeMap(); for (Type t : types) { typesCB.put(t.getType_name(), new Long(t.getType_id())); } } return typesCB; } /** * after making change save in db */ public void doSave() { listCadeauxBean.updateList(listDetail); } //============================================================ //= methodes publiques pour le client sur la liste = //============================================================ /** * * @return */ public String doCreatCustList() { String goTo = null; custlistRech = listCadeauxBean.createCustList(custlistRech); goTo = "custlist.created"; return goTo; } /** * */ public String doFindCustList() { String goTo = null; custlistDetail = listCadeauxBean.findCustList(getParamId("cust_list_id")); goTo = "custlist.displayed"; return goTo; } /** * find the list of the cust */ public String doFindCustLists() { String goTo = null; custlists = listCadeauxBean.searchCustLists(custlistRech); goTo = "custlists.displayed"; return goTo; } //=========================================== //= Fonctions utilitaires = //=========================================== /** * @return the types */ public Long getParamId(String sParam) { FacesContext context = FacesContext.getCurrentInstance(); Map<String, String> map = context.getExternalContext().getRequestParameterMap(); String result = map.get(sParam); return Long.valueOf(result); //return Long.valueOf(result); } // getters and setters }
voila j'ai essayé d'être le plus claire merci d'avance à vous
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
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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173 <h:form> <table> <tr> <td><h:outputText value="#{msgs.first_name}" /></td> <td><h:inputText value="#{list.custlistRech.customer.first_name}" /></td> <%-- <h:inputText id="lastName" value="#{personCtrl.newPerson.lastName}" required="true" requiredMessage="Nom obligatoire" /> <h:message for="first_name" /> --%> </tr> <tr> <td><h:outputText value="#{msgs.last_name}" /></td> <td><h:inputText value="#{list.custlistRech.customer.last_name}" /></td> </tr> <tr> <td><h:outputText value="#{msgs.type}" /></td> <td> <h:selectOneMenu value="#{list.listRech.type.type_id}"> <f:selectItems value="#{list.allTypes}"/> </h:selectOneMenu> </td> </tr> <tr> <td><h:outputText value="#{msgs.status}" /></td> <td><h:inputText value="#{list.listRech.status}" /></td> </tr> <tr> <td><h:commandButton value="#{msgs.Rech}" action="#{list.doFindLists}" /></td> </tr> </table> </h:form> <h:form> <h:dataTable value="#{list.custlists}" var="custlistsRow"> <f:facet name="caption"> <h:outputText value="#{msgs.windowShowLists}"/> </f:facet> <h:column footerClass="columnFooter"> <f:facet name="header"> <h:outputText value="#{msgs.first_name}" /> </f:facet> <h:outputText value="#{custlistsRow.customer.first_name}" /> <f:facet name="footer"> <h:outputText value="#{msgs.first_name}" /> </f:facet> </h:column> <h:column footerClass="columnFooter"> <f:facet name="header"> <h:outputText value="#{msgs.last_name}" /> </f:facet> <h:outputText value="#{custlistsRow.customer.last_name}" /> <f:facet name="footer"> <h:outputText value="#{msgs.last_name}" /> </f:facet> </h:column> </h:dataTable> <h:dataTable value="#{list.list_s_cadeaux}" border="3" rules="all" var="listsRow"> <h:column footerClass="columnFooter"> <f:facet name="header"> <h:outputText value="#{msgs.status}" /> </f:facet> <h:commandLink action="#{list.doFindList}" value="#{listsRow.status}"> <f:param name="list_id" value="#{listsRow.list_id}" /> </h:commandLink> <%--<h:outputText value="#{listRow.status}" />--%> <f:facet name="footer"> <h:outputText value="#{msgs.status}" /> </f:facet> </h:column> <h:column footerClass="columnFooter"> <f:facet name="header"> <h:outputText value="#{msgs.av_amount}" /> </f:facet> <h:outputText value="#{listsRow.av_amount}" /> <f:facet name="footer"> <h:outputText value="#{msgs.av_amount}" /> </f:facet> </h:column> <h:column footerClass="columnFooter"> <f:facet name="header"> <h:outputText value="#{msgs.creation_date}" /> </f:facet> <h:outputText value="#{listsRow.creation_date}" /> <f:facet name="footer"> <h:outputText value="#{msgs.creation_date}" /> </f:facet> </h:column> <h:column footerClass="columnFooter"> <f:facet name="header"> <h:outputText value="#{msgs.event_date}" /> </f:facet> <h:outputText value="#{listsRow.event_date}" /> <f:facet name="footer"> <h:outputText value="#{msgs.event_date}" /> </f:facet> </h:column> <h:column footerClass="columnFooter"> <f:facet name="header"> <h:outputText value="#{msgs.type}" /> </f:facet> <h:outputText value="#{listsRow.type.type_name}"/> <f:facet name="footer"> <h:outputText value="#{msgs.type}" /> </f:facet> </h:column> </h:dataTable> </h:form> <h:form title="Detail"> <table> <tr> <td><h:outputText value="#{msgs.first_name}" /></td> <td><h:inputText value="#{list.custlistDetail.customer.first_name}" /></td> </tr> <tr> <td><h:outputText value="#{msgs.last_name}" /></td> <td><h:inputText value="#{list.custlistDetail.customer.last_name}" /></td> </tr> <tr> <td><h:outputText value="#{msgs.status}" /></td> <td><h:inputText value="#{list.listDetail.status}" /></td> </tr> <tr> <td><h:outputText value="#{msgs.av_amount}" /></td> <td><h:inputText value="#{list.listDetail.av_amount}" /></td> </tr> <tr> <td><h:outputText value="#{msgs.creation_date}" /></td> <td><h:inputText value="#{list.listDetail.creation_date}" > <f:convertDateTime pattern="dd/MM/yyyy" /> </h:inputText> </td> </tr> <tr> <td><h:outputText value="#{msgs.event_date}" /></td> <td> <h:inputText value="#{list.listDetail.event_date}" > <f:convertDateTime pattern="dd/MM/yyyy" /> </h:inputText> </td> </tr> <tr> <td><h:outputText value="#{msgs.type}" /></td> <td> <h:selectOneMenu value="#{list.listDetail.type.type_id}"> <f:selectItems value="#{list.allTypes}"/> </h:selectOneMenu> </td> </tr> <tr> <td><h:commandButton value="#{msgs.Sauve}" action="#{list.doSave}" /></td> </tr> </table> </h:form>
Partager