Bonsoir,
Je suis débutant sur wicket et je cale sur un problème.
J'utilise un ListView pour alimenter une table HTML. Pour chaque ligne de cette table j'ai un pauvre label et une DropDownChoice.
J'arrive à afficher ma table. Mais lorsque je veux soumettre le formulaire, je ne recupere pas les changements sur la DropDownChoice.
J'imagine que je m'emmele les pinceaux quand à l'utilisation d'un modèle. J'ai lié à mon formulaire un CompoundPropertyModel, et je pense que le problème vient du fait que mon ListView n'est pas bien cablé sur ce CompoundPropertyModel.
Voici le code, je mets tout le markup et tout le java. En gras la partie qui pose problème !
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 <wicket:extend> <form wicket:id="form"> <div class="bordure" style="padding:5px; height:15%"> <div class="titreSection"> Template Page <img src="images/button_preview32.png" title="Prévisualisation" onClick="(alert('previ'))"/> <img src="images/button_arbo32.png" title="Arborescence" onClick="(alert('arborescence'))"/> <button wicket:id="valider" type="submit"><img src="images/button_valider32.png" title="Valider"/></button> <img align="right" src="images/button_annuler32.png" title="Annuler" onClick="getAjaxResponse('templatePageConsultation.html');"/> <img align="right" src="images/button_delete32.png" title="Supprimer" onClick="supprimerTemplatePage();"/> </div> <br> <div style="padding:5px"> <span style="width:50px;">Identifiant :</span> <span wicket:id="templatePageBean.idTemplatePage" style="font-weight:bold">idTemplatePage</span> <br/> <br/> <span style="width:50px;">Nom :</span> <input wicket:id="templatePageBean.nom" type="text" id="nom" value="nom"></input> </div> </div> <br> <div class="bordure" style="padding:5px"> <p class="titreSection"><b>Zones</b></p> <div style="padding:5px"> <select wicket:id="listeZones"> <option value="-1">--Sélectionner une zone--</option> </select> <input type="button" name="ajouterZone" value="Ajouter" onClick="javascript:ajouterZone();" /> </div> <table id="tableZones" width="40%"> <thead> <tr> <th width="10px"></th> <th width="60%" align="left">Nom</th> <th width="30%">Position</th> </tr> </thead> <tr wicket:id="templatePageBean.positionsZones" class="two"> <td></td> <td><span wicket:id="zoneBean.nom"></span></td> <td><select wicket:id="alignement"></select></td> </tr> </table> <div style="float:clear-both;padding:5px"> <input type="button" name="supprimerZone" value="Supprimer"" /> <input type="button" name="up" value="Up"/> <input type="button" name="down" value="Down"" /> </div> </div> </form> </wicket:extend>Merci d'avance pour votre aide
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 public ViewOrUpdateTemplatePage() { final List<String> listeAlignement = new ArrayList<String>(); listeAlignement.add(ConstantesPresentation.FLOAT_LEFT); listeAlignement.add(ConstantesPresentation.FLOAT_RIGHT); listeAlignement.add(ConstantesPresentation.CLEAR_BOTH); CompoundPropertyModel pageModel = new CompoundPropertyModel( new LoadableDetachableModel() { private static final long serialVersionUID = 1L; ViewOrUpdateTemplatePageBean beanPage = new ViewOrUpdateTemplatePageBean(); @Override protected Object load() { TemplatePageBean templatePageBean = manageTemplatePage.findTemplatePageById(1); beanPage.setTemplatePageBean(templatePageBean); List<ZoneBean> listeZonesBean = manageZone.findAllZones(); beanPage.setListeZones(listeZonesBean); beanPage.getListeAlignement().add(ConstantesPresentation.FLOAT_LEFT); beanPage.getListeAlignement().add(ConstantesPresentation.FLOAT_RIGHT); beanPage.getListeAlignement().add(ConstantesPresentation.CLEAR_BOTH); log.debug("Load TemplatePageBean : " + templatePageBean.toString()); log.debug("Liste zone bean size : " + listeZonesBean.size()); return beanPage; } }); Form form = new Form("form", pageModel) { private static final long serialVersionUID = 1L; @Override protected void onSubmit() { TemplatePageBean t = ((ViewOrUpdateTemplatePageBean)getModelObject()).getTemplatePageBean(); List<PositionZoneBean> listePositionZoneBean = ((ViewOrUpdateTemplatePageBean)getModelObject()).getTemplatePageBean().getPositionsZones(); for (PositionZoneBean posBean : listePositionZoneBean) { log.debug(posBean.toString()); } t.setPositionsZones(listePositionZoneBean); log.debug("Submit TemplatePageBean : " + t.toString()); manageTemplatePage.modifyTemplatePage(t); } }; // TODO : mapper idZone dans le renderer ChoiceRenderer listeZonesRenderer = new ChoiceRenderer<ZoneBean>("nom"); DropDownChoice ddZones = new DropDownChoice("listeZones", ((ViewOrUpdateTemplatePageBean)pageModel.getObject()).getListeZones(), listeZonesRenderer); form.add(ddZones); form.add(new Button("valider")); Label labelId = new Label("templatePageBean.idTemplatePage"); form.add(labelId); form.add(new TextField<String>("templatePageBean.nom")); ListView positionZoneListView = new ListView<PositionZoneBean>("templatePageBean.positionsZones", ((ViewOrUpdateTemplatePageBean)pageModel.getObject()).getTemplatePageBean().getPositionsZones()) { private static final long serialVersionUID = 1L; @Override protected void populateItem(ListItem<PositionZoneBean> item) { item.setModel(new CompoundPropertyModel(item.getModel())); String idMarkupNom = "zoneBean.nom"; log.debug("idMarkupNom " + idMarkupNom); item.add(new Label(idMarkupNom)); String idMarkupAlignement = "alignement"; log.debug("idMarkupNom " + idMarkupAlignement); item.add(new DropDownChoice(idMarkupAlignement, listeAlignement)); } }; positionZoneListView.setReuseItems(true); form.add(positionZoneListView); add(form); }
Partager