Bonjour,
J'utilise wicket depuis peu de temps. J'essaie de faire un petit prototype d'application eShop.
J'ai créé 2 Panel réutilisables sur une page :
Le premier contient une liste répétée de produits du catalogue avec un lien "ajouter au panier". Ce dernier lien stocke l'ID du produit cliqué en session.
Le second quant à lui affiche brièvement la liste de produits contenus dans le panier en se basant sur l'actuel contenu du panier en session.
Tout ceci fonctionne à un détail près, mon composant panier sur la page ne se rafraîchit pas toujours lorsque des nouveaux items sont ajoutés au panier.
J'ai essayé de le rendre non versionné avec la propriété setVersioned(false), ça ne change rien, il se rafraîchit toujours par rapport au cache. Je ne vois pas trop comment je pourrais faire pour remédier à ce problème sans obliger mes composants à se référencer mutuellement.
Une solution serait de forcer mon composant panier à toujours se rafraichir quoi qu'il arrive mais je ne trouve pas comment faire.
Mon code de composant est celui-ci :
En gros il se renseigne sur ce qui est actuellement en session puis génère un listview. J'aurai peut être la possibilité d'utiliser une implémentation custom de IModel dans ListView, mais je sais pas trop si c'est la solution et je m'y perd un peu.
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 public final class BasketBox extends Panel { public BasketBox(String id) { super (id); this.setVersioned(false); final UserSession session = (UserSession) this.getSession(); add( new ListView<ProductWithAttr>("itemList", session.getProductWithAttr() ) { @Override protected void populateItem(ListItem<ProductWithAttr> item) { ProductWithAttr prod = item.getModelObject(); item.add( new Label("name", prod.getName() )); item.add( new Label("price", new DecimalFormat("#0.00").format( prod.getPrice() ) )); } }); add( new Label("total", new CompoundPropertyModel( new LoadableDetachableModel() { @Override protected Object load() { return new DecimalFormat("#0.00").format( session.getBasketValue()) ; } }))); } }
Si quelqu'un connaît une solution propre, je suis preneur!
Partager