Wicket: Como implementar um IDataProvider / LoadableDetachableModel para listas indexados

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

  •  21-08-2019
  •  | 
  •  

Pergunta

Qual é a melhor maneira de implementar uma IDataProvider e uma LoadableDetachable em Wicket para uma lista indexada? Suponha que eu tenho um cliente que fez uma lista de Endereços.

class Customer {
    List<Adress> adresses;
}

Agora eu quero implementar um provedor de dados / LDM para os endereços de um cliente. Suponho que a maneira usual é um IDataProvider como uma classe interna que se refere ao modelo de cliente do componente, como:

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

}

Pergunta: Como eu poderia implementar isso, quando o endereço não tem um ID (por exemplo, é um Hibernate embutidos / CollectionOfElements), mas só pode ser identificado por seu índice na lista customer.adresses? Como faço para manter referência à entidade proprietária eo índice?

Na verdade, eu sei que uma solução, mas eu me pergunto se há um padrão comum de fazer isso.

Foi útil?

Solução

Qual é a sua solução proposta? Sua pergunta não parece muito claro para mim. São os endereços carregados preguiçosamente pelo Hibernate? Eu realmente não posso ver o que o seu problema é com o código acima. Se os endereços são carregados em pelo Hibernate nas c.getAdresses () iterator (.); chamada, então você tem os endereços de e qual é o problema? É o customer.adresses na verdade uma lista de endereços objetos, ou apenas id? Você sempre pode gravar a entidade proprietária e do índice dentro de sua AdressLoadableDetachableModel ou seja, AdressLoadableDetachableModel (a.getId (), (Customer) Component.this.getModel ()) você pode ajudar a esclarecer?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top