2015-05-13 2 views
6

Ich habe begonnen, Wicket Framework zu lernen, und ich stieß auf Wicket-Modelle und ich las über Model(), CompouneModel() und CompoundPropertyModel(), aber ich habe nicht den tatsächlichen Unterschied zwischen ihnen. Ich habe auf Google nach diesem gesucht, aber ich habe keine Informationen darüber erhalten.Was ist der Unterschied zwischen Model, PropertyModel und CompoundPropertyModel in Wicket?

Diese link gibt Beschreibung zwischen CompoundPropertyModel und PropertyModel, aber es ist immer noch nicht eindeutig für Unterschied.

Nur die Sache, die ich zwischen Modell und anderen zwei unterscheiden könnte, ist, dass Modell nicht mit dynamischen Feldern arbeiten kann, während andere zwei können.

Kann jemand bitte den Unterschied zwischen diesen Modellen geben?

Antwort

9

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> 
Verwandte Themen