Wicket: Wie ein IDataProvider / LoadableDetachableModel für indizierte Listen implementieren

StackOverflow https://stackoverflow.com/questions/368033

  •  21-08-2019
  •  | 
  •  

Frage

Was ist der beste Weg, um ein IDataProvider und LoadableDetachable in Wicket für eine indizierte Liste zu implementieren? Angenommen, ich habe einen Kunden, der eine Liste von Adressen hat.

class Customer {
    List<Adress> adresses;
}

Jetzt möchte ich für die Adressen eines Kunden einen Datenprovider / LDM implementieren. Ich nehme an, die übliche Art und Weise ein IDataProvider als innere Klasse ist, die an das Kunden-Modell der Komponente bezieht, wie:

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());
}

}

Frage: Wie würde ich dies umsetzen, wenn die Adresse nicht eine ID hat (zum Beispiel, es ist ein Hibernate Fähiges / CollectionOfElements), kann aber nur durch seinen Index in der customer.adresses Liste identifiziert werden? Wie halte ich Bezug auf den Besitz Einheit und den Index?

In der Tat, ich weiß, eine Lösung, aber ich frage mich, ob es ein gemeinsames Muster, dies zu tun.

War es hilfreich?

Lösung

Was ist Ihre vorgeschlagene Lösung? Ihre Frage scheint nicht ganz klar zu mir. Sind die Adressen träge durch Hibernate geladen? Ich kann nicht wirklich sehen, was Ihr Problem mit dem obigen Code ist. . Wenn Ihre Adressen erhalten durch Hibernate auf dem c.getAdresses geladen in () iterator (); rufen, dann haben Sie die Adressen und was ist das Problem? Ist die customer.adresses tatsächlich eine Liste von Adressobjekten, oder einfach nur ids? Sie können jederzeit die besitzende Einheit aufnehmen und Index in Ihrem AdressLoadableDetachableModel d AdressLoadableDetachableModel (a.getId (), (Kunde) Component.this.getModel ()) Können Sie mir helfen klären?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top