Wicket: Comment mettre en œuvre un IDataProvider / LoadableDetachableModel pour les listes indexées
Question
Quelle est la meilleure façon de mettre en œuvre un et un IDataProvider
dans Wicket pour LoadableDetachable
une liste indexée? Supposons que j'ai un client qui a une liste des adresses,.
class Customer {
List<Adress> adresses;
}
Maintenant, je veux mettre en œuvre un fournisseur de données / MLD pour les adresses d'un client. Je suppose que la manière habituelle est une comme une classe <=> intérieure qui fait référence au modèle client du composant, comme:
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());
}
}
Question: Comment puis-je mettre en œuvre, lorsque l'adresse ne dispose pas d'un ID (par exemple, il est une mise en veille prolongée intégrable / CollectionOfElements) mais ne peut être identifié par son index dans la liste des customer.adresses? Comment puis-je garder référence à l'entité propriétaire et l'indice?
En fait, je sais une solution, mais je me demande s'il y a un modèle commun pour le faire.
La solution
Quelle est votre solution proposée? Votre question ne semble pas tout à fait clair pour moi. Sont les adresses chargées paresseusement par mise en veille prolongée? Je ne vois pas vraiment ce que votre problème est avec le code ci-dessus. . Si vos adresses sont bien chargées dans Hibernate sur les c.getAdresses () iterator (); appeler, vous avez les adresses et quel est le problème? Est-ce le customer.adresses en fait une liste d'objets d'adresse, ou tout simplement ids? Vous pouvez toujours enregistrer l'entité propriétaire et son index dans votre AdressLoadableDetachableModel à savoir AdressLoadableDetachableModel (a.getId (), (client) Component.this.getModel ()) Pouvez-vous aider à clarifier?