2015-05-13 2 views
6

Я начал изучать каркас Wicket, и я наткнулся на калитки, и я читал о Model(), CompouneModel() и CompoundPropertyModel(), но я не получил фактической разницы между ними. Я искал в Google для этого, но я не получил никакой информации об этом.В чем разница между Model, PropertyModel и CompoundPropertyModel в Wicket?

В этом link приведено описание между CompoundPropertyModel и PropertyModel, но по-прежнему его непонятно правильно для разницы.

Только то, что я могу отличить от модели и других двух, не может работать с динамическими полями, а другие два могут.

Может кто-то попросить дать разницу между этими моделями?

ответ

9

Все они являются реализациями интерфейса IModel.

Класс Модель - это базовая реализация, то есть почти как «держатель данных», поэтому вы можете сохранить объект в этой модели и получить. Добавленная ценность этого класса заключается в том, чтобы пересылать, чтобы получить и установить объект модели, если сохраненный объект является другой моделью (IModel).

Класс PropertyModel полезен, если вы хотите получить/установить свойство, используя выражение свойства. Смотрите пример:

class Data { 

    private Integer data; 
    private String name; 

    /* getters and setters */ 

} 

Как получить и установить данные с помощью 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' 

Класс CompoundPropertyModel полезно, если вы хотите propage свойства компонентов их идентификаторов. Смотрите пример (используя тот же класс данных):

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 Код с использованием 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 (на панели):

<span>3</span> 
<span>my name</span> 
Смежные вопросы