假設下列多級結構:模型鏈接/「橋接」讀取多級結構爲平面
class Habitation {
private House house;
private List<Habitant> habitants;
}
需要顯示在平面形式爲在ListView每個居住者(這就是爲什麼多這個目的級別對象需要以平面形式表示)是這樣的:
| habitant.name | house.address |
| ... | ... |
我認爲這將是做正確的事:創建一個「架橋」 /鏈接對象是這樣的:
class PlanarHabitant {
private IModel<House> house;
private IModel<Habitant> habitant;
}
這種橋接對象從Habitation
對象創建這樣的:
//Habitation.expand()
public List<PlanarHabitant> expand() {
List<PlanarHabitant> res = new ArrayList<PlanarHabitant>();
for (Habitant habitant : this.habitants) {
PlanarHabitant ph = new PlanarHabitant();
ph.setHouse(Model.of(this.house));
ph.setHabitant(Model.of(habitant));
res.add(ph);
}
return res;
}
,並將該數據顯示在ListView中。它是這樣完成的:
final IModel<List<PlanarHabitant>> model = (IModel<List<PlanarHabitant>>) this.getDefaultModel();//model assigned is Model.ofList(Habitation.expand())
this.importList = new ListView<PlanarHabitant>("habitants", model) {
@Override
protected void populateItem(final ListItem<PlanarHabitant> item) {
item.add(new Label("cn", new PropertyModel(item.getModel(), "habitant.name")));
}
};
問題是標籤模型總是給出例外,即字段不存在。
我試圖分配CompoundPropertyModel
(和其他人)到PlanarHabitant
和不同的路徑表達式,但沒有任何工作。
我只是使用模型和路徑表達式的錯誤組合或是完全錯誤的方法?
多層次結構不應該轉換爲平面的原因是它需要被保存,House的重複在PlanarHabitant
會在DB中產生重複,這不應該發生。
確實如此,謝謝。我擔心的是,我的'Habitation'和'Habitant'對象包含'boolean'字段,我認爲它會創建一個副本。但它沒有發生(可能我的知識是誤導)。 並感謝您的建議。 – Eugene