2012-05-26 5 views
5

por motivos de simplicidad:¿Cómo editar un conjunto <? extiende EntityProxy> con el marco GWT Editor?

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

public class Address 
{ 
    String city; 
    String street; 
} 

con y combinar

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

y

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

me dieron clases UiBuinder editar AddressProxy y claro para mí cómo utilizar ListEditor en caso si tengo Lista, pero los datos están establecidos en la clase Persona ¿cómo uso el Marco del Editor para editarlos? ¿O cómo puedo convertir Set en List cuando se convierte en PersonProxy?

Me hicieron un intento de poner una especie de clase Editor adaptador que implementaría

LeafValueEditor<Set<AddressProxy>> 

y luego dentro del movimiento LeafValueEditor.setValue() para una lista y empezar una nueva driver.edit() en una jerarquía del Editor separada que se ocupa de la edición de la Lista, pero ahora tiene suerte.

Respuesta

6

Debe crear un CompositeEditor<Set<AddressProxy>, AddressProxy, AddressEditor>, similar a un ListEditor pero manejando un Set en lugar de un List. Supongo que de alguna manera podría delegar a un ListEditor aunque realmente no estoy seguro.

+0

Gracias! Esto es algo para empezar. Francamente, perezoso esperaba un enlace a algún código :-). –

+1

Creo que GWT debe proporcionar algún tipo de estándar 'SetEditor' (probablemente delegando a' ListEditor'). Tuve el mismo problema que OP y terminé exponiendo accesadores 'List'-typeed (convirtiendo propiedad' '' type' real) en la clase de dominio solo para poder usar 'ListEditor'. Pero no siempre es posible hacerlo (a veces solo necesitamos el comportamiento 'Set'-wise en el lado del cliente) –

+2

El problema es que a) un conjunto por definición no tiene un orden específico y los subeditores para los valores son necesariamente una _list_, y b) es probable que desee permitir valores duplicados en el curso de la edición y solo verificar la singularidad en _flush_time, pero de alguna manera debe decirle al usuario cuando ese sea el caso ("hey, tuve 4 valores y cuando lo guardé solo guardé 3 ¡de ellos!"); y la singularidad depende de cómo implemente 'equals()' en los objetos editados. Sin embargo, si puede encontrar un _standard_ 'SetEditor', ¡por favor, contribuya! –

3

lo he hecho con puntos y rutas (una ruta contiene N puntos):

Ruta (Compuesto):

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

Ruta (del lado del servidor):

@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

Veo lo que quiere decir, pero la pregunta es: Dado que PointProxy tiene varios campos y un Editor de sí mismo, ¿cómo conecto los puntos? Y preste atención a que la pregunta es sobre el conjunto no la lista la edición de lista es trivial dada la clase de ayuda en GWT SDK y el código de muestra correspondiente. –

+0

Se olvidó de mencionar RouteProxy (EntityProxy) y PointProxy (ValueProxy). Ambos fueron agregados en la respuesta. Solo intenta hacer con Set en lugar de List. –

Cuestiones relacionadas