bonjour
je viens de réaliser un test, tout a bien fonctionné. Seule réelle correction apportée : passer de
item.getModelObject.getVille()
à
item.getModelObject().getVille()
. Ceci dit, un bête IDE devrait avoir montré l'absence de parenthèses, donc je ne comprends pas très bien.
Voici donc le code correspondant, sachant que ce n'est pas ce que je recommanderai mais juste pour illustrer la problématique présente.
ResultatBlocPanel:
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
|
package org.demo.dataview;
import java.util.ArrayList;
import java.util.List;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.markup.repeater.Item;
import org.apache.wicket.markup.repeater.data.DataView;
import org.apache.wicket.markup.repeater.data.ListDataProvider;
public class ResultatBlocPanel extends Panel {
public ResultatBlocPanel(String id, Resultat resultatWS) {
super(id);
final List<Personne> listeResultats;
List<Personne> tempList = resultatWS.getListePersonne();
if (tempList != null) {
listeResultats = tempList;
} else {
listeResultats = new ArrayList<Personne>();
}
final DataView<Personne> dataView = new DataView<Personne>("liste",
new ListDataProvider<Personne>(listeResultats)) {
public void populateItem(final Item<Personne> item) {
item.add(new Label("nom", item.getModelObject().getNom()));
item.add(new Label("prenom",item.getModelObject().getPrenom()));
item.add(new Label("cp", item.getModelObject().getCodePostal()));
item.add(new Label("ville", item.getModelObject().getVille()));
item.add(new Label("pays", item.getModelObject().getPays()));
}
public boolean isVisible() {
return (listeResultats != null) && !listeResultats.isEmpty();
}
};
add(dataView);
}
} |
ResultatBlocPanel.html :
1 2 3 4 5 6 7 8 9 10 11
| <html xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd">
<head>
</head>
<body>
<wicket:panel>
<table>
<tr wicket:id="liste"><td wicket:id="nom"></td><td wicket:id="prenom"></td><td wicket:id="cp"></td><td wicket:id="ville"></td><td wicket:id="pays"></td></tr>
</table>
</wicket:panel>
</body>
</html> |
Personne :
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
| package org.demo.dataview;
import java.io.Serializable;
public class Personne implements Serializable {
private String nom;
private String prenom;
private String codePostal;
private String ville;
private String pays;
public String getNom() {
return nom;
}
public void setNom(String nom) {
this.nom = nom;
}
public String getPrenom() {
return prenom;
}
public void setPrenom(String prenom) {
this.prenom = prenom;
}
public String getVille() {
return ville;
}
public void setVille(String ville) {
this.ville = ville;
}
public String getPays() {
return pays;
}
public void setPays(String pays) {
this.pays = pays;
}
public void setCodePostal(String codePostal) {
this.codePostal = codePostal;
}
public String getCodePostal() {
return codePostal;
}
} |
DataViewTestPage :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| package org.demo.dataview;
import java.util.ArrayList;
import java.util.List;
import org.apache.wicket.markup.html.WebPage;
public class DataViewTestPage extends WebPage {
public DataViewTestPage(){
Resultat resultatWS = new Resultat();
add(new ResultatBlocPanel("dataviewEmpty", resultatWS ));
List<Personne> personnes = new ArrayList<Personne>();
Personne personne = new Personne();
personne.setNom("test");
personnes.add(personne);
resultatWS.setPersonnes(personnes ) ;
add(new ResultatBlocPanel("dataviewNonEmpty", resultatWS ));
}
} |
DataViewTestPage.html :
1 2 3 4 5 6 7 8 9 10
| <html xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd">
<body>
Empty data view
<wicket:container wicket:id="dataviewEmpty">
</wicket:container>
<hr/>Non empty data view
<wicket:container wicket:id="dataviewNonEmpty">
</wicket:container>
</body>
</html> |
Parmi les améliorations que j'apporterai, il y a notamment :
- ne jamais retourner null au lieu d'une liste, toujours retourner une liste nulle,
- éviter de lier des composants directement à des valeurs, comme c'est le cas pour les labels utilisés dans l'exemple. En général cela revient plus tard hanter le développeur ayant codé la chose (vu que sans doute la valeur des champs sera éditée).
Dans le cas présent, le code actuel:
item.add(new Label("ville", item.getModelObject().getVille()));
pourrait devenir par exemple :
item.add(new Label("ville", new PropertyModel<String>(item.getModel(), "ville")));
=> relit à chaque accès au modèle la valeur associée, possibilité en plus de modifier la valeur contenue dans le PropertyModel (non utilisé ici).
D'autres modèles sont utilisables, comme par exemple :
1 2 3 4 5 6 7
| item.add(new Label("ville", new AbstractReadOnlyModel<String>() {
@Override
public String getObject() {
return item.getModelObject().getVille();
}
})); |
=> ce dernier se contente de lire à chaque fois la valeur qui va bien.
Ne pas hésiter en cas de question.
++
joseph
Partager