Wicket:如何为索引列表实现IDataProvider / LoadableDetachableModel

时间:2008-12-15 11:03:48

标签: java wicket

在Wicket中为索引列表实现IDataProviderLoadableDetachable的最佳方法是什么?假设我的客户有一份地址清单。

class Customer {
    List<Adress> adresses;
}

现在我想为客户的地址实现数据提供者/ ldm。我认为通常的方法是IDataProvider作为内部类,它引用组件的客户模型,如:

class AdressDataProvider implements IDataProvider {

public Iterator iterator() {
    Customer c = (Customer)Component.this.getModel(); // somehow get the customer model
    return c.getAdresses().iterator();
}

public IModel model(Object o) {
    Adress a = (Adress) o;
    // Return an LDM which loads the adress by id.
    return new AdressLoadableDetachableModel(a.getId());
}

}

问题:如果地址没有ID(例如,它是Hibernate Embeddable / CollectionOfElements),但只能通过customer.adresses列表中的索引来识别,我将如何实现?如何保持对拥有实体和索引的引用?

事实上,我知道一个解决方案,但我想知道是否有一个共同的模式来做到这一点。

1 个答案:

答案 0 :(得分:0)

您建议的解决方案是什么?你的问题对我来说似乎不太清楚。地址是否被休眠加载?我无法真正看到上述代码的问题。如果你的地址被Hibernate加载到c.getAdresses()。iterator();打电话,然后你有地址,有什么问题? customer.adresses实际上是一个地址对象列表,还是只是id? 您始终可以在AdressLoadableDetachableModel中记录拥有实体及其索引,即 AdressLoadableDetachableModel(a.getId(),(Customer)Component.this.getModel()) 你能帮忙澄清一下吗?