Калитка:Как реализовать IDataProvider / LoadableDetachableModel для индексированных списков
Вопрос
Каков наилучший способ реализовать IDataProvider
и еще LoadableDetachable
в Wicket для индексированного списка?Предположим, у меня есть Клиент, у которого есть список Адресов.
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());
}
}
Вопрос:Как бы мне реализовать это, если адрес не имеет идентификатора (напримерэто Hibernate Embeddable / CollectionOfElements), но может быть идентифицирован только по его индексу в списке customer.adresses?Как мне сохранить ссылку на объект-владелец и индекс?
На самом деле, я знаю решение, но мне интересно, существует ли общий шаблон для этого.
Решение
Каково предлагаемое вами решение?Ваш вопрос кажется мне не совсем ясным.Загружаются ли адреса лениво в режиме гибернации?Я действительно не могу понять, в чем ваша проблема с приведенным выше кодом.Если ваши адреса загружаются с помощью гибернации на c.getAdresses().iterator();звоните, значит, у вас есть адреса и в чем проблема?Является ли customer.adresses на самом деле списком объектов address или просто идентификаторами?Вы всегда можете записать объект-владелец и его индекс внутри вашей AdressLoadableDetachableModel, т.е.AdressLoadableDetachableModel(a.getId(), Компонент (Клиента).this.getModel()) Можете ли вы помочь внести ясность?