2012-05-26 9 views
5

per semplicità:Come modificare un Set <? estende EntityProxy> con il framework GWT Editor?

public class Person 
{ 
    String name; 
    Set<Address> addresses; 
} 

public class Address 
{ 
    String city; 
    String street; 
} 

con e la congruenza

public interface PersonProxy extends EntityProxy 
{ 
    public String getName(); 
    public Set<AdressProxy> getAddresses(); 
} 

e

public interface AdressProxy extends EntityProxy 
{ 
    public String getCity(); 
    public String getStreet(); 
} 

ho avuto classi UiBuinder modificare AddressProxy ed è chiaro per me come utilizzare ListEditor in caso se ho ottenuto Elenco ma i dati sono impostati nella classe Persona come utilizzare Editor Framework per modificarli? Oppure come posso convertire Set in List quando diventa PersonProxy?

ho fatto un tentativo di mettere una sorta di adattatore di classe Editor che implementare

LeafValueEditor<Set<AddressProxy>> 

e poi all'interno del movimento LeafValueEditor.setValue() per una lista e iniziare una nuova driver.edit() su una gerarchia di Editor separata che si occupa dell'editing delle liste ma con fortuna.

risposta

6

È necessario creare un CompositeEditor<Set<AddressProxy>, AddressProxy, AddressEditor>, simile ad un ListEditor, ma la gestione di un Set invece di un List. Suppongo che potresti in qualche modo delegare a un ListEditor anche se non sono sicuro.

+0

Grazie! Questo è qualcosa per iniziare. Francamente pigro mi speravo in un link ad un codice :-). –

+1

Penso che alcuni tipi di standard 'SetEditor' (probabilmente delegando a' ListEditor') dovrebbero essere forniti da GWT. Ho avuto lo stesso problema dell'OP e ho finito per esporre gli accessors 'List'-typed (convertendo la proprietà reale' Set'-typed) sulla classe domain solo per poter usare 'ListEditor'. Ma non è sempre possibile farlo (a volte abbiamo solo bisogno del comportamento 'Set'-saggio sul lato client) –

+2

Il problema è che a) un Set per definizione non ha un ordine specifico e i sub-editor per i valori sono necessariamente un _list_, e b) probabilmente vuoi consentire valori duplicati nel corso del montaggio e controlla solo l'unicità al momento _flush_, ma devi in ​​qualche modo dire all'utente quando questo è il caso ("hey, avevo 4 valori e quando l'ho salvato solo mantenuto 3 di loro!"); e l'unicità dipende da come hai implementato 'equals()' negli oggetti modificati. Se riesci a trovare uno _standard_ 'SetEditor', tuttavia, per favore contribuisci! –

3

ho fatto con Punti e percorsi (un percorso contiene N Punti):

percorso (Composite):

@UiField 
TextBox name; 

@Ignore 
@UiField 
FlexTable listPoints; 

PointsEditor pointsEditor = new PointsEditor(); 

    .... 

pointsEditor.add(String id); 

PointsEditor:

public class PointsEditor implements HasRequestContext<List<PointProxy>>, ValueAwareEditor<List<PointProxy>> { 

    List<PointProxy> points = new ArrayList<PointProxy>(); 

    public void add(String id) { 
     PointProxy point = ctx.create(PointProxy.class); 
     point.setId(id); 
     points.add(point);   
    } 

percorso (lato server):

@Embedded 
private List<Point> points = new ArrayList<Point>(); 

Rout eProxy

public interface RouteProxy extends EntityProxy { 

     abstract List<PointProxy> getPoints(); 

     abstract void setPoints(List<PointProxy> points); 

PointProxy

public interface PointProxy extends ValueProxy { 

... 

} 
+0

Vedo cosa intendi ma la domanda è: Dato che PointProxy ha diversi campi e un editor di esso come faccio a connettere i punti? E fai attenzione che la domanda riguarda Set non List la modifica delle liste è banale nella classe helper in GWT SDK e nel corrispondente codice di esempio. –

+0

Ho dimenticato di menzionare RouteProxy (EntityProxy) e PointProxy (ValueProxy). Entrambi sono stati aggiunti alla risposta. Basta provare a fare con Set al posto di List. –