Калитка: Как реализовать IDataProvider / LoadableDetachableModel для индексированных списков - PullRequest
0 голосов
/ 15 декабря 2008

Как лучше всего реализовать 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? Как сохранить ссылку на владелец объекта и индекс?

На самом деле, я знаю решение, но мне интересно, есть ли общий способ сделать это.

1 Ответ

0 голосов
/ 18 июля 2009

Какое ваше предлагаемое решение? Ваш вопрос мне не совсем понятен. Адреса загружаются лениво спящим? Я не могу понять, в чем ваша проблема с приведенным выше кодом. Если ваши адреса загружены Hibernate на c.getAdresses (). Iterator (); позвоните, тогда у вас есть адреса и в чем проблема? Является ли customer.adresses списком адресных объектов или просто идентификаторами? Вы всегда можете записать владеющую сущность и ее индекс внутри AdressLoadableDetachableModel, т.е. AdressLoadableDetachableModel (a.getId (), (Customer) Component.this.getModel ()) Вы можете помочь уточнить?

...