bonjour,
j'ai un souci avec les collection qui ne se mette pas a jour directement comment pui-je m'y prendre merci
bonjour,
j'ai un souci avec les collection qui ne se mette pas a jour directement comment pui-je m'y prendre merci
Vous avez peut être hâte de réussir et il n'y a rien de mal à cela...
mais la patience est aussi une vertu; l'échec vous l'enseignera certainement..."
j'utilise l'entity suivante
avec la facade suivante :
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
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321 /* * To change this template, choose Tools | Templates * and open the template in the editor. */ package entity; import java.io.Serializable; import java.math.BigDecimal; import java.util.Collection; import javax.persistence.Basic; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.Lob; import javax.persistence.ManyToOne; import javax.persistence.NamedQueries; import javax.persistence.NamedQuery; import javax.persistence.OneToMany; import javax.persistence.Table; import javax.validation.constraints.NotNull; import javax.validation.constraints.Size; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlTransient; /** * * @author Coshom */ @Entity @Table(name = "article") @XmlRootElement @NamedQueries({ @NamedQuery(name = "Article.findByCategorie", query = "SELECT a FROM Article a WHERE a.idCateg = :categorie ORDER BY a.nom ASC"), @NamedQuery(name = "Article.findByCategorieActiv", query = "SELECT a FROM Article a WHERE a.idCateg = :categorie and a.disponibilite='a' ORDER BY a.nom ASC"), @NamedQuery(name = "Article.externe", query = "SELECT a FROM Article a WHERE a.nom = 'Article externe au magasin'"), @NamedQuery(name = "Article.findAll", query = "SELECT a FROM Article a "), @NamedQuery(name = "Article.findAllByname", query = "SELECT a FROM Article a ORDER BY a.nom ASC"), @NamedQuery(name = "Article.findAllBynameActiv", query = "SELECT a FROM Article a WHERE a.disponibilite = 'a' ORDER BY a.nom ASC"), @NamedQuery(name = "Article.findAllBynameActivAndStock", query = "SELECT a FROM Article a WHERE a.disponibilite = 'a' AND a.quantite > 0 ORDER BY a.nom ASC"), @NamedQuery(name = "Article.findByNumCodeBarre", query = "SELECT a FROM Article a WHERE a.numCodeBarre = :numCodeBarre"), @NamedQuery(name = "Article.findByNom", query = "SELECT a FROM Article a WHERE a.nom = :nom"), @NamedQuery(name = "Article.findByPrix", query = "SELECT a FROM Article a WHERE a.prix = :prix"), @NamedQuery(name = "Article.findByMarque", query = "SELECT a FROM Article a WHERE a.marque = :marque"), @NamedQuery(name = "Article.findByQuantite", query = "SELECT a FROM Article a WHERE a.quantite = :quantite"), @NamedQuery(name = "Article.findByQuantiteMax", query = "SELECT a FROM Article a WHERE a.quantiteMax = :quantiteMax"), @NamedQuery(name = "Article.findByQuantiteMin", query = "SELECT a FROM Article a WHERE a.quantiteMin = :quantiteMin"), @NamedQuery(name = "Article.findByGarantie", query = "SELECT a FROM Article a WHERE a.garantie = :garantie"), @NamedQuery(name = "Article.findByDisponibilite", query = "SELECT a FROM Article a WHERE a.disponibilite = :disponibilite"), @NamedQuery(name = "Article.findByUrl", query = "SELECT a FROM Article a WHERE a.url = :url")}) public class Article implements Serializable { private static final long serialVersionUID = 1L; @Id @Basic(optional = false) @NotNull @Column(name = "num_code_barre") private Integer numCodeBarre; @Basic(optional = false) @NotNull @Size(min = 1, max = 60) @Column(name = "nom") private String nom; @Basic(optional = false) @NotNull @Lob @Size(min = 1, max = 16777215) @Column(name = "description") private String description; @Basic(optional = false) @NotNull @Lob @Size(min = 1, max = 16777215) @Column(name = "detail") private String detail; // @Max(value=?) @Min(value=?)//if you know range of your decimal fields consider using these annotations to enforce field validation @Basic(optional = false) @NotNull @Column(name = "prix") private BigDecimal prix; @Basic(optional = false) @NotNull @Size(min = 1, max = 30) @Column(name = "marque") private String marque; @Basic(optional = false) @NotNull @Column(name = "quantite") private int quantite; @Basic(optional = false) @NotNull @Column(name = "quantite_max") private int quantiteMax; @Basic(optional = false) @NotNull @Column(name = "quantite_min") private int quantiteMin; @Basic(optional = false) @NotNull @Column(name = "garantie") private int garantie; @Basic(optional = false) @NotNull @Column(name = "disponibilite") private char disponibilite; @Basic(optional = false) @NotNull @Size(min = 1, max = 255) @Column(name = "url") private String url; @OneToMany(cascade = CascadeType.ALL, mappedBy = "numCodeBarre") private Collection<Vente> venteCollection; @OneToMany(mappedBy = "numCodeBarre") private Collection<Reparation> reparationCollection; @OneToMany(cascade = CascadeType.ALL, mappedBy = "numCodeBarre") private Collection<Support> supportCollection; @JoinColumn(name = "id_categ", referencedColumnName = "id_categ") @ManyToOne(optional = false) private Categorie idCateg; @OneToMany(cascade = CascadeType.ALL, mappedBy = "numCodeBarre") private Collection<Cote> coteCollection; @OneToMany(cascade = CascadeType.ALL, mappedBy = "numCodeBarre") private Collection<Commentaire> commentaireCollection; public Article() { } public Article(Integer numCodeBarre) { this.numCodeBarre = numCodeBarre; } public Article(Integer numCodeBarre, String nom, String description, String detail, BigDecimal prix, String marque, int quantite, int quantiteMax, int quantiteMin, int garantie, char disponibilite, String url) { this.numCodeBarre = numCodeBarre; this.nom = nom; this.description = description; this.detail = detail; this.prix = prix; this.marque = marque; this.quantite = quantite; this.quantiteMax = quantiteMax; this.quantiteMin = quantiteMin; this.garantie = garantie; this.disponibilite = disponibilite; this.url = url; } public Integer getNumCodeBarre() { return numCodeBarre; } public void setNumCodeBarre(Integer numCodeBarre) { this.numCodeBarre = numCodeBarre; } public String getNom() { return nom; } public void setNom(String nom) { this.nom = nom; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } public String getDetail() { return detail; } public void setDetail(String detail) { this.detail = detail; } public BigDecimal getPrix() { return prix; } public void setPrix(BigDecimal prix) { this.prix = prix; } public String getMarque() { return marque; } public void setMarque(String marque) { this.marque = marque; } public int getQuantite() { return quantite; } public void setQuantite(int quantite) { this.quantite = quantite; } public int getQuantiteMax() { return quantiteMax; } public void setQuantiteMax(int quantiteMax) { this.quantiteMax = quantiteMax; } public int getQuantiteMin() { return quantiteMin; } public void setQuantiteMin(int quantiteMin) { this.quantiteMin = quantiteMin; } public int getGarantie() { return garantie; } public void setGarantie(int garantie) { this.garantie = garantie; } public char getDisponibilite() { return disponibilite; } public void setDisponibilite(char disponibilite) { this.disponibilite = disponibilite; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } @XmlTransient public Collection<Vente> getVenteCollection() { return venteCollection; } public void setVenteCollection(Collection<Vente> venteCollection) { this.venteCollection = venteCollection; } @XmlTransient public Collection<Reparation> getReparationCollection() { return reparationCollection; } public void setReparationCollection(Collection<Reparation> reparationCollection) { this.reparationCollection = reparationCollection; } @XmlTransient public Collection<Support> getSupportCollection() { return supportCollection; } public void setSupportCollection(Collection<Support> supportCollection) { this.supportCollection = supportCollection; } public Categorie getIdCateg() { return idCateg; } public void setIdCateg(Categorie idCateg) { this.idCateg = idCateg; } @XmlTransient public Collection<Cote> getCoteCollection() { return coteCollection; } public void setCoteCollection(Collection<Cote> coteCollection) { this.coteCollection = coteCollection; } @XmlTransient public Collection<Commentaire> getCommentaireCollection() { return commentaireCollection; } public void setCommentaireCollection(Collection<Commentaire> commentaireCollection) { this.commentaireCollection = commentaireCollection; } @Override public int hashCode() { int hash = 0; hash += (numCodeBarre != null ? numCodeBarre.hashCode() : 0); return hash; } @Override public boolean equals(Object object) { // TODO: Warning - this method won't work in the case the id fields are not set if (!(object instanceof Article)) { return false; } Article other = (Article) object; if ((this.numCodeBarre == null && other.numCodeBarre != null) || (this.numCodeBarre != null && !this.numCodeBarre.equals(other.numCodeBarre))) { return false; } return true; } @Override public String toString() { return "entity.Article[ numCodeBarre=" + numCodeBarre + " ]"; } }
je recupere donc les données de la facon suivante :
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 /* * To change this template, choose Tools | Templates * and open the template in the editor. */ package session; import entity.Article; import entity.Categorie; import entity.Membre; import java.util.List; import javax.ejb.Stateless; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import javax.persistence.Query; /** * * @author Coshom */ @Stateless public class ArticleFacade extends AbstractFacade<Article> { @PersistenceContext(unitName = "Coshom-ejbPU") private EntityManager em; @Override protected EntityManager getEntityManager() { return em; } public ArticleFacade() { super(Article.class); } public List<Article> AllArticleByCategorie (Categorie categorie) { Query query = em.createNamedQuery("Article.findByCategorie"); query.setParameter("categorie",categorie); return query.getResultList(); } public List<Article> AllArticleByCategorieActiv (Categorie categorie) { Query query = em.createNamedQuery("Article.findByCategorieActiv"); query.setParameter("categorie",categorie); return query.getResultList(); } public List<Article> ArticleAll () { Query query = em.createNamedQuery("Article.findAllByname"); return query.getResultList(); } public List<Article> ArticleAllActiv () { Query query = em.createNamedQuery("Article.findAllBynameActiv"); return query.getResultList(); } public Article ArticleExterne () { Query query = em.createNamedQuery("Article.externe"); return (Article) query.getSingleResult(); } public List<Article> ArticleAllActivAndStock () { Query query = em.createNamedQuery("Article.findAllBynameActivAndStock"); return query.getResultList(); } }
jusque la tout se passe bien pour les données
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 List ListArticle = articleFacade.ArticleAllActiv (); request.setAttribute("ListArticle",ListArticle);
sauf quand je fais dans ma serlvette :
dans un foreach bien sur au debut il m'affiche bien la bonne liste de cote mais quand j'en ajouter d'autre je dois attendre un peu avant que les cotes s'affiche enfin comment resoudre ce probleme ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 ${ListArticle.coteCollection}
Comment rafraichis tu ta collection après ajout?
Vous avez peut être hâte de réussir et il n'y a rien de mal à cela...
mais la patience est aussi une vertu; l'échec vous l'enseignera certainement..."
j'utilise les fonction suivante pour l'ajout je ne vois pas comment je peux actualiser mes collection :
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 /* * To change this template, choose Tools | Templates * and open the template in the editor. */ package session; import java.util.List; import javax.persistence.EntityManager; /** * * @author Coshom */ public abstract class AbstractFacade<T> { private Class<T> entityClass; public AbstractFacade(Class<T> entityClass) { this.entityClass = entityClass; } protected abstract EntityManager getEntityManager(); public void create(T entity) { getEntityManager().persist(entity); } public void update(T entity) { getEntityManager().merge(entity); } public void remove(T entity) { getEntityManager().remove(getEntityManager().merge(entity)); } public T find(Object id) { return getEntityManager().find(entityClass, id); } public List<T> findAll() { javax.persistence.criteria.CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery(); cq.select(cq.from(entityClass)); return getEntityManager().createQuery(cq).getResultList(); } public List<T> findRange(int[] range) { javax.persistence.criteria.CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery(); cq.select(cq.from(entityClass)); javax.persistence.Query q = getEntityManager().createQuery(cq); q.setMaxResults(range[1] - range[0]); q.setFirstResult(range[0]); return q.getResultList(); } public int count() { javax.persistence.criteria.CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery(); javax.persistence.criteria.Root<T> rt = cq.from(entityClass); cq.select(getEntityManager().getCriteriaBuilder().count(rt)); javax.persistence.Query q = getEntityManager().createQuery(cq); return ((Long) q.getSingleResult()).intValue(); } }
Difficile de t'aider si tu ne donnes les informations qu'en compte goutte ainsi . Dans quelle page ajoute tu, est ce la même page dans laquelle t'affiche la collection? quel est le rapport entre la page où t'ajoutes et la page ou tu visualises cette collection d'ajout? si l'ajout et la collection se font dans la même page alors il faudrait utiliser une instruction ajax. Peux nous refaire un scénario complet de ton process? où ajoutes tu ? (page d'ajout), et que doit il se passer après l'ajout, en d'autres termes quelle page appelles tu, est ce cette page d'affichage de la liste des côtes? On ne demande qu'à t'aider si tu fais le minimum de bien clarifier ton souci.
Vous avez peut être hâte de réussir et il n'y a rien de mal à cela...
mais la patience est aussi une vertu; l'échec vous l'enseignera certainement..."
alors l'ajout se fais a un formulaire en jsp
qui envoit sur ma servlet le code suivant :
donc je fais apel a la facade article :
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 if (userPath.equals("/AddArticle")) { String categorie =""; String marque=""; String nom =""; String description=""; String errorMessage =""; String disponible="";String url="";String detail = ""; String maj =""; Categorie categorieSelected=null; int CodeBarre = 0;int QTEstoque= 0 ;int QTEmin=0;int QTEmax=0;int Garantie =0; BigDecimal Price= null; Article articleAdd = new Article(); if(request.getParameter("Articlecateg")!=null &&! request.getParameter("Articlecateg").equals("")) { categorie = request.getParameter("Articlecateg"); categorieSelected = categorieFacade.find(Integer.parseInt(categorie)); }else errorMessage +="<br/>Veuillez choisir une catégorie "; if (session.getAttribute("AddArticle") != null ){ articleAdd = (Article)session.getAttribute("AddArticle") ; maj="oui"; } if(categorieSelected != null && categorieSelected.getNomCateg().equals("PC")) { if(request.getParameter("CPU")!=null && !request.getParameter("CPU").equals("")) { detail += request.getParameter("CPU")+"<br/>"; }else errorMessage +="<br/>Veuillez remplir le champs processeur "; if(request.getParameter("RAM")!=null && !request.getParameter("RAM").equals("")) { detail += request.getParameter("RAM")+"<br/>"; }else errorMessage +="<br/>Veuillez remplir le champs ram "; if(request.getParameter("GPU")!=null && !request.getParameter("GPU").equals("")) { detail += request.getParameter("GPU")+"<br/>"; }else errorMessage +="<br/>Veuillez remplir le champs carte graphique "; if(request.getParameter("hardDisk")!=null && !request.getParameter("hardDisk").equals("")) { detail += request.getParameter("hardDisk")+"<br/>"; }else errorMessage +="<br/>Veuillez remplir le champs disc dur "; if(request.getParameter("usb")!=null && !request.getParameter("usb").equals("")) { detail += request.getParameter("usb")+"<br/>"; }else errorMessage +="<br/>Veuillez remplir le champs usb "; if(request.getParameter("alim")!=null && !request.getParameter("alim").equals("")) { detail += request.getParameter("alim")+"<br/>"; }else errorMessage +="<br/>Veuillez remplir le champs alimentation "; if(request.getParameter("dvdPlayer")!=null && !request.getParameter("dvdPlayer").equals("")) { detail += request.getParameter("dvdPlayer")+"<br/>"; }else errorMessage +="<br/>Veuillez remplir le champs lecteur "; if(request.getParameter("dimension")!=null && !request.getParameter("dimension").equals("")) { detail += request.getParameter("dimension")+"<br/>"; }else errorMessage +="<br/>Veuillez remplir le champs dimension "; if(request.getParameter("weight")!=null && !request.getParameter("weight").equals("")) { detail += request.getParameter("weight")+"<br/>"; }else errorMessage +="<br/>Veuillez remplir le champs Poids"; } if(request.getParameter("detail")!=null && !request.getParameter("detail").equals("")) { detail += request.getParameter("detail"); }else errorMessage +="<br/>Veuillez remplir le champs détails "; if(request.getParameter("codeBarre")!=null && !request.getParameter("codeBarre").equals("")) { CodeBarre = Integer.parseInt( request.getParameter("codeBarre")); }else errorMessage +="<br/>Veuillez remplir le champs code barre "; if(request.getParameter("nom")!=null && !request.getParameter("nom").equals("")) { nom = request.getParameter("nom"); }else errorMessage +="<br/>Veuillez remplir le champs nom "; if(request.getParameter("Price")!=null && !request.getParameter("Price").equals("")) { Price = new BigDecimal( request.getParameter("Price")); }else errorMessage +="<br/>Veuillez remplir le champs prix "; if(request.getParameter("Price")!=null && !request.getParameter("Price").equals("")) { marque = request.getParameter("marque"); }else errorMessage +="<br/>Veuillez remplir le champs marque "; if(request.getParameter("Price")!=null && !request.getParameter("Price").equals("")) { description = request.getParameter("description"); }else errorMessage +="<br/>Veuillez remplir le champs description "; if(request.getParameter("QTEstoque")!=null && !request.getParameter("QTEstoque").equals("")) { QTEstoque = Integer.parseInt(request.getParameter("QTEstoque")); }else errorMessage +="<br/>Veuillez remplir le champs quantité en stoque "; if(request.getParameter("QTEmin")!=null && !request.getParameter("QTEmin").equals("")) { QTEmin = Integer.parseInt(request.getParameter("QTEmin")); }else errorMessage +="<br/>Veuillez remplir le champs quantité minimum "; if(request.getParameter("QTEmax")!=null && !request.getParameter("QTEmax").equals("")) { QTEmax = Integer.parseInt(request.getParameter("QTEmax")); }else errorMessage +="<br/>Veuillez remplir le champs quantité maximum "; if(request.getParameter("Garantie")!=null && !request.getParameter("Garantie").equals("")) { Garantie =Integer.parseInt( request.getParameter("Garantie")); }else errorMessage +="<br/>Veuillez remplir le champs garantie "; disponible = request.getParameter("disponible"); url = request.getPart("file").toString(); String filename = url.substring(url.indexOf("=")+1,url.indexOf(",")); if((filename ==null || filename.equals("") )&& maj.equals("")) errorMessage +="<br/>Veuillez remplir le champs image"; url = "."+File.separator+"image"+File.separator+"article"+File.separator+filename; char intdisponible = 'u'; if (disponible != null && !disponible.isEmpty() ) { intdisponible = disponible.charAt(0); } // téléchargment de l'image if(!filename.equals("")) { String outputfilurl2e = this.getServletContext().getRealPath(File.separator+"image"+File.separator+"article"+File.separator + filename ); try { // on accède au fichier uploadé par le client Part p1 = request.getPart("file"); InputStream is = p1.getInputStream(); // copie sur le serveur FileOutputStream os = new FileOutputStream (outputfilurl2e); int ch = is.read(); while (ch != -1) { os.write(ch); ch = is.read(); } os.close(); } catch(Exception ex) { System.out.println("Exception -->" + ex.getMessage()); } articleAdd.setUrl(url); } if (errorMessage.equals("")){ articleAdd.setDescription(description); articleAdd.setDetail(detail); articleAdd.setDisponibilite(intdisponible); articleAdd.setGarantie(Garantie); articleAdd.setIdCateg(categorieSelected); articleAdd.setMarque(marque); articleAdd.setNom(nom); articleAdd.setNumCodeBarre(CodeBarre); articleAdd.setPrix(Price); articleAdd.setQuantite(QTEstoque); articleAdd.setQuantiteMax(QTEmax); articleAdd.setQuantiteMin(QTEmin); if (session.getAttribute("AddArticle") != null ) { articleFacade.update(articleAdd); }else{ articleFacade.create(articleAdd); } response.sendRedirect("GererArticle"); return ; }
qui étant la facade commune a toute mes entité
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 /* * To change this template, choose Tools | Templates * and open the template in the editor. */ package session; import entity.Article; import entity.Categorie; import entity.Membre; import java.util.List; import javax.ejb.Stateless; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import javax.persistence.Query; /** * * @author Coshom */ @Stateless public class ArticleFacade extends AbstractFacade<Article> { @PersistenceContext(unitName = "Coshom-ejbPU") private EntityManager em; @Override protected EntityManager getEntityManager() { return em; } public ArticleFacade() { super(Article.class); } public List<Article> AllArticleByCategorie (Categorie categorie) { Query query = em.createNamedQuery("Article.findByCategorie"); query.setParameter("categorie",categorie); return query.getResultList(); } public List<Article> AllArticleByCategorieActiv (Categorie categorie) { Query query = em.createNamedQuery("Article.findByCategorieActiv"); query.setParameter("categorie",categorie); return query.getResultList(); } public List<Article> ArticleAll () { Query query = em.createNamedQuery("Article.findAllByname"); return query.getResultList(); } public List<Article> ArticleAllActiv () { Query query = em.createNamedQuery("Article.findAllBynameActiv"); return query.getResultList(); } public Article ArticleExterne () { Query query = em.createNamedQuery("Article.externe"); return (Article) query.getSingleResult(); } public List<Article> ArticleAllActivAndStock () { Query query = em.createNamedQuery("Article.findAllBynameActivAndStock"); return query.getResultList(); } }
tout cela fonctionne apart le rafrechissement des collection que je sais pas comment je peu le faire
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 /* * To change this template, choose Tools | Templates * and open the template in the editor. */ package session; import entity.Article; import entity.Categorie; import entity.Membre; import java.util.List; import javax.ejb.Stateless; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import javax.persistence.Query; /** * * @author Coshom */ @Stateless public class ArticleFacade extends AbstractFacade<Article> { @PersistenceContext(unitName = "Coshom-ejbPU") private EntityManager em; @Override protected EntityManager getEntityManager() { return em; } public ArticleFacade() { super(Article.class); } public List<Article> AllArticleByCategorie (Categorie categorie) { Query query = em.createNamedQuery("Article.findByCategorie"); query.setParameter("categorie",categorie); return query.getResultList(); } public List<Article> AllArticleByCategorieActiv (Categorie categorie) { Query query = em.createNamedQuery("Article.findByCategorieActiv"); query.setParameter("categorie",categorie); return query.getResultList(); } public List<Article> ArticleAll () { Query query = em.createNamedQuery("Article.findAllByname"); return query.getResultList(); } public List<Article> ArticleAllActiv () { Query query = em.createNamedQuery("Article.findAllBynameActiv"); return query.getResultList(); } public Article ArticleExterne () { Query query = em.createNamedQuery("Article.externe"); return (Article) query.getSingleResult(); } public List<Article> ArticleAllActivAndStock () { Query query = em.createNamedQuery("Article.findAllBynameActivAndStock"); return query.getResultList(); } }
Relis bien mon post précédent et éssayes aux questions que j'y ai posées et on avancera certainement mieux .
Vous avez peut être hâte de réussir et il n'y a rien de mal à cela...
mais la patience est aussi une vertu; l'échec vous l'enseignera certainement..."
excuse moi non il s'agit de 2 page distint complètement
entity catégorie :
facade catégorie:
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 /* * To change this template, choose Tools | Templates * and open the template in the editor. */ package entity; import java.io.Serializable; import java.util.Collection; import javax.persistence.Basic; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.NamedQueries; import javax.persistence.NamedQuery; import javax.persistence.OneToMany; import javax.persistence.Table; import javax.validation.constraints.NotNull; import javax.validation.constraints.Size; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlTransient; /** * * @author Coshom */ @Entity @Table(name = "categorie") @XmlRootElement @NamedQueries({ @NamedQuery(name = "Categorie.findAllAvailable", query = "SELECT c FROM Categorie c WHERE c.disponibilite = 'a' ORDER BY c.nomCateg ASC"), @NamedQuery(name = "Categorie.findAll", query = "SELECT c FROM Categorie c ORDER BY c.nomCateg ASC"), @NamedQuery(name = "Categorie.findByIdCateg", query = "SELECT c FROM Categorie c WHERE c.idCateg = :idCateg"), @NamedQuery(name = "Categorie.findByNomCateg", query = "SELECT c FROM Categorie c WHERE c.nomCateg = :nomCateg"), @NamedQuery(name = "Categorie.findByUrlCateg", query = "SELECT c FROM Categorie c WHERE c.urlCateg = :urlCateg")}) public class Categorie implements Serializable { private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Basic(optional = false) @Column(name = "id_categ") private Integer idCateg; @Basic(optional = false) @NotNull @Size(min = 1, max = 30) @Column(name = "nom_categ") private String nomCateg; @Basic(optional = false) @NotNull @Column(name = "disponibilite") private char disponibilite; @Basic(optional = false) @NotNull @Size(min = 1, max = 255) @Column(name = "url_categ") private String urlCateg; @OneToMany(cascade = CascadeType.ALL, mappedBy = "idCateg") private Collection<Article> articleCollection; public Categorie() { } public Categorie(Integer idCateg) { this.idCateg = idCateg; } public Categorie(Integer idCateg, String nomCateg, String urlCateg) { this.idCateg = idCateg; this.nomCateg = nomCateg; this.urlCateg = urlCateg; } public Integer getIdCateg() { return idCateg; } public void setIdCateg(Integer idCateg) { this.idCateg = idCateg; } public String getNomCateg() { return nomCateg; } public void setNomCateg(String nomCateg) { this.nomCateg = nomCateg; } public String getUrlCateg() { return urlCateg; } public void setUrlCateg(String urlCateg) { this.urlCateg = urlCateg; } public char getDisponibilite() { return disponibilite; } public void setDisponibilite(char disponibilite) { this.disponibilite = disponibilite; } @XmlTransient public Collection<Article> getArticleCollection() { return articleCollection; } public void setArticleCollection(Collection<Article> articleCollection) { this.articleCollection = articleCollection; } @Override public int hashCode() { int hash = 0; hash += (idCateg != null ? idCateg.hashCode() : 0); return hash; } @Override public boolean equals(Object object) { // TODO: Warning - this method won't work in the case the id fields are not set if (!(object instanceof Categorie)) { return false; } Categorie other = (Categorie) object; if ((this.idCateg == null && other.idCateg != null) || (this.idCateg != null && !this.idCateg.equals(other.idCateg))) { return false; } return true; } @Override public String toString() { return "entity.Categorie[ idCateg=" + idCateg + " ]"; } }
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 /* * To change this template, choose Tools | Templates * and open the template in the editor. */ package session; import entity.Categorie; import java.util.List; import javax.ejb.Stateless; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import javax.persistence.Query; /** * * @author Coshom */ @Stateless public class CategorieFacade extends AbstractFacade<Categorie> { @PersistenceContext(unitName = "Coshom-ejbPU") private EntityManager em; @Override protected EntityManager getEntityManager() { return em; } public CategorieFacade() { super(Categorie.class); } public List<Categorie> CategorieAll () { Query query = em.createNamedQuery("Categorie.findAll"); return query.getResultList(); } public List<Categorie> CategorieAvailable () { Query query = em.createNamedQuery("Categorie.findAllAvailable"); return query.getResultList(); } }
jsp ou je fait apel a l'entity qui lie catégorie au article avec le count
partie servlet avec l'envoit de la catégorie
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 <div class="menuGauche"> <div class="well" > <ul class="nav nav-list menu"> <c:if test="${!empty ajout}"> <li class="item"><a href="Article">${ajout}<span class="imageMenu"><input type="image" src="./image/add.png"/></span></a> </c:if> <c:forEach var="categorie" items="${categorie}"> <li class="item"><a href="${urlmenu}?cat=${categorie.idCateg}">${categorie.nomCateg} <span class="cpt">${fn:length(categorie.articleCollection)}</span></a> </li> </c:forEach> </ul> </div> </div>
et donc quand je vais ajouter un article avec le code audessu je dois attendre un peu de temps avant que le nombre par catégorie sois bon
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 if (userPath.equals("/Vitrine")) { List ListArticle = null; List Listcategorie = null; String cat = request.getParameter("cat"); if (cat != null && !cat.isEmpty() ) { int catint = Integer.parseInt(cat); Categorie categorie = categorieFacade.find(catint); ListArticle = articleFacade.AllArticleByCategorieActiv(categorie); }else ListArticle = articleFacade.ArticleAllActiv(); //Listcategorie = categorieFacade.Mescategorie(); Listcategorie = categorieFacade.CategorieAvailable(); // envoit de l'url de la page String url = userPath.replaceAll("/",""); request.setAttribute("ListArticle",ListArticle); request.setAttribute("urlmenu",url); request.setAttribute("categorie", Listcategorie); // erreur if (session.getAttribute("errorMessage") != null ){ request.setAttribute("errorMessage",(String)session.getAttribute("errorMessage")); session.setAttribute("errorMessage",null);} }
j'espere avoir repondu a la question
solution :
Code : Sélectionner tout - Visualiser dans une fenêtre à part getEntityManager().getEntityManagerFactory().getCache().evictAll();
Bonjour,
Désolé, j'ai pas eu beaucoup de temps aujourd'jui pour me repencher sur ton souci.Tu peux donc clôturer le post si t'as trouvé la solution (en cliquant sur le bouton )? A moins qu'elle ne te convienne pas
Vous avez peut être hâte de réussir et il n'y a rien de mal à cela...
mais la patience est aussi une vertu; l'échec vous l'enseignera certainement..."
Quand on dois jouer avec evictAll, c'est pas normal. Tu n'aurais pas fait l'erreur de laisser ta session jpa ouverte après la fin de tes requêtes HTTP? Normalement c'est une session par requête. A la fin de la requête la session est cloturée et l'ensemble des instances d'objet JPA doivent être oubliés.
JPA ne rafraichis rien, c'est à toi de démarrer à chaque fois une nouvelle session pour redemander ta liste, afin que la base de donnée soit à nouveau lue.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager