Wicket: Come implementare un IDataProvider / LoadableDetachableModel per le liste indicizzate
Domanda
Qual è il modo migliore per attuare un IDataProvider
e un LoadableDetachable
in Wicket per un elenco indicizzato? Supponiamo che io sono un cliente che ha un elenco di Indirizzi.
class Customer {
List<Adress> adresses;
}
Ora voglio implementare un data provider / LDM per gli indirizzi di un cliente. Suppongo che il modo usuale è un <=> come una classe interna che si riferisce al modello cliente del componente, come:
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());
}
}
Domanda: Come faccio a implementare questa, quando l'indirizzo non dispone di un ID (ad esempio, si tratta di una sospensione Embeddable / CollectionOfElements), ma può essere identificato solo con il suo indice nella lista customer.adresses? Come faccio a mantenere riferimento all'entità possedere e l'indice?
In realtà, so che una soluzione, ma mi chiedo se c'è un modello comune per fare questo.
Soluzione
Qual è la vostra soluzione proposta? La tua domanda non sembra del tutto chiaro per me. Sono gli indirizzi caricati pigramente da Hibernate? Non posso davvero vedere che cosa il vostro problema è con il codice di cui sopra. . Se gli indirizzi vengono caricati da Hibernate sulle c.getAdresses () iterator (); chiamare, allora avete gli indirizzi e qual è il problema? È il customer.adresses in realtà un elenco di oggetti di indirizzo, o solo id? È sempre possibile registrare all'entità proprietaria ed è indice all'interno del vostro AdressLoadableDetachableModel vale a dire AdressLoadableDetachableModel (a.getId (), (cliente) Component.this.getModel ()) Si può contribuire a chiarire?