Alle von ihnen sind Implementierungen der Schnittstelle IModel.
Klasse Modell ist eine grundlegende Implementierung, die fast nur ein "Datenbehälter" ist, so dass Sie ein Objekt in diesem Modell speichern und erhalten können. Der zusätzliche Wert dieser Klasse besteht darin, das Modellobjekt abzurufen und zu setzen, wenn das gespeicherte Objekt ein anderes Modell (IModel) ist.
Klasse PropertyModel ist nützlich, wenn Sie eine Eigenschaft mithilfe des Eigenschaftsausdrucks festlegen möchten. Sehen Sie ein Beispiel:
class Data {
private Integer data;
private String name;
/* getters and setters */
}
Wie zum Abrufen und Festlegen von Daten mit dem Property:
Data data = new Data();
data.setId(1);
data.setName("data entity");
IModel idModel = new PropertyModel(data, "id");
IModel nameModel = new PropertyModel(data, "name");
System.out.println(data.getId());
// prints '1'
System.out.println(idModel.getObject());
// prints '1'
System.out.println(data.getName);
// prints 'data entity'
System.out.println(nameModel.getObject());
// prints 'data entity'
data.setId(2);
nameModel.setObject("a new name");
System.out.println(data.getId());
// prints '2'
System.out.println(idModel.getObject());
// prints '2'
System.out.println(data.getName());
// prints 'a new name'
System.out.println(nameModel.getObject());
// prints 'a new name'
Klasse CompoundPropertyModel nützlich, wenn Sie auf die Komponenten durch ihre IDs ProPage Eigenschaften möchten. Sehen Sie ein Beispiel (unter Verwendung der gleichen Klasse Data):
Java-Code (MyPanel.java):
class MyPanel extends Panel {
public MyPanel(IModel<Data> model) {
super(new CompoundPropertyModel<Data>(model));
add(new Label("id"));
add(new Label("data"));
}
}
Markup (MyPanel.html):
<wicket:panel>
<span wicket:id="id">placeholer for id</span>
<span wicket:id="name">placeholer for id</span>
</wicket:panel>
Java Code unter Verwendung von MyClass:
// in a Page, Panel or an other Component
Data data = new Data();
data.setId(3);
data.setName('my name');
add(new MyPanel(Model.of(data)));
gerenderte Ausgabe HTML (durch das Panel):
<span>3</span>
<span>my name</span>