2012-05-26 20 views
5

dla uproszczenia:Jak edytować zestaw <? przedłuża EntityProxy> z ramką GWT Editor?

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

public class Address 
{ 
    String city; 
    String street; 
} 

z i dopasowanie

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

i

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

mam zajęcia UiBuinder edytować AddressProxy i to dla mnie jasne, w jaki sposób korzystać z ListEditor w jeśli mam listę, ale dane są ustawione w klasie Person w jaki sposób mogę użyć Edytora Framework do ich edycji? A może w jaki sposób mogę przekonwertować zestaw do listy, gdy stanie się to PersonProxy?

zrobiłem próbę umieścić rodzaj klasy Edytor adaptera że wdrożenie

LeafValueEditor<Set<AddressProxy>> 

a następnie wewnątrz LeafValueEditor.setValue() przenieść do listy i rozpocząć nowy driver.edit() na osobna hierarchia edytora, która zajmuje się edycją list, ale przy odrobinie szczęścia.

Odpowiedz

6

Powinieneś utworzyć , podobny do ListEditor, ale obsługujący Set zamiast List. Przypuszczam, że możesz jakoś przekazać do ListEditor, chociaż nie jestem pewien.

+0

Dzięki! To jest coś, od czego zacząć. Szczerze mówiąc, leniwy miałem nadzieję na link do jakiegoś kodu :-). –

+1

Myślę, że jakiś typ standardowego "SetEditor" (prawdopodobnie delegowania do 'ListEditor') powinien dostarczyć GWT. Miałem ten sam problem co OP i skończyło się na tym, że ujawniałem dostęp do wpisywanych na liście typów obiektów (konwertowanie prawdziwej właściwości 'Set'-typeed) w klasie domeny tylko po to, aby móc używać' ListEditor'. Ale nie zawsze jest to możliwe (czasami potrzebujemy po prostu 'Set'-mądre zachowanie po stronie klienta). –

+2

Problem polega na tym, że a) a Ustawiony z definicji nie ma określonej kolejności, a podedytorzy dla wartości są koniecznie _list_, i b) prawdopodobnie chcesz zezwolić na powielanie wartości w trakcie edycji i sprawdzać unikalność tylko w _flush_ time, ale musisz w jakiś sposób powiedzieć użytkownikowi, kiedy tak jest ("hej, miałem 4 wartości i kiedy zapisałem to tylko zachowałem 3 z nich!"); a unikalność zależy od tego, jak zaimplementowano 'equals()' w edytowanych obiektach. Jeśli możesz wymyślić _standardowy "SetEditor", to proszę, proszę go wesprzyj! –

3

Zrobiłem go z punktów i tras (jedna trasa zawiera N punktów):

Route (kompozytowe):

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

trasy (po stronie serwera):

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

eProxy

public interface RouteProxy extends EntityProxy { 

     abstract List<PointProxy> getPoints(); 

     abstract void setPoints(List<PointProxy> points); 

PointProxy

public interface PointProxy extends ValueProxy { 

... 

} 
+0

Widzę, co masz na myśli, ale pytanie brzmi: Biorąc pod uwagę, że PointProxy ma kilka pól i jego edytor samodzielnie jak połączyć kropki? Zwróć też uwagę, że pytanie dotyczy zestawu lista nie jest lista edycja list jest banalnie podana klasa pomocnika w GWT SDK i odpowiedni kod przykładowy. –

+0

Zapomniałem wspomnieć o RouteProxy (EntityProxy) i PointProxy (ValueProxy). Obie zostały dodane w odpowiedzi. Po prostu spróbuj zrobić z Set w miejscu listy. –