Tutti sono implementazioni dell'interfaccia IModel.
Classe modello è un'implementazione di base, che è quasi solo un 'Titolare del trattamento' in modo da poter memorizzare un oggetto in quel modello e ottenere. Il valore aggiunto di questa classe è di inoltrare per ottenere e impostare l'oggetto modello se l'oggetto memorizzato è un altro modello (IModel).
Classe PropertyModel è utile se si desidera ottenere/per impostare una proprietà utilizzando l'espressione di proprietà. Vedere un esempio:
class Data {
private Integer data;
private String name;
/* getters and setters */
}
Come ottenere e impostare i dati utilizzando il PropertyModel:
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'
Classe CompoundPropertyModel è utile se si desidera propage proprietà ai componenti da loro ID. Vedere un esempio (utilizzando la stessa classe di dati):
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 Codice che utilizza 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)));
HTML output di rendering (dalla centrale):
<span>3</span>
<span>my name</span>
fonte
2015-05-13 09:53:36