2012-05-26 43 views
5

为了简洁起见:如何编辑Set <?用GWT编辑器框架扩展EntityProxy>?

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

public class Address 
{ 
    String city; 
    String street; 
} 

与和匹配

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

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

我UiBuinder类编辑AddressProxy ,它清楚地知道如何使用ListEditor在如果我有List但数据设置在Person类中 如何使用Editor Framework编辑它们? 或者当它变成PersonProxy时,我该如何将设置转换为列表?在

我做了一个企图把一种适配器编辑器类将实现

LeafValueEditor<Set<AddressProxy>> 

,然后LeafValueEditor.setValue()移动到列表内,开始新的driver.edit()一个独立的编辑器层次结构,负责列表编辑,但现在运气好。

回答

6

您应该创建CompositeEditor<Set<AddressProxy>, AddressProxy, AddressEditor>,类似于ListEditor,但是处理Set而不是List。 我想你可以以某种方式委托给ListEditor,尽管我真的不确定。

+0

谢谢!这是从一开始。坦率地懒惰我希望链接到一些代码:-)。 –

+1

我认为一些标准的'SetEditor'(可能委托给'ListEditor')应该由GWT提供。我和OP有同样的问题,最后暴露了List类的访问器(转换真正的Set类型的属性),只是为了能够使用ListEditor。但是并不总是可以做到的(有时候我们只需要在客户端使用Set-wise行为) –

+2

问题是a)按定义设置没有特定顺序,值的子编辑器必须是_list_, b)你可能想要在编辑过程中允许重复的值,并且只在_flush_时间检查唯一性,但是你必须以某种方式告诉用户何时是这种情况(“嘿,我有4个值,当我保存时只保留3个值他们!“);唯一性取决于你如何在编辑的对象中实现equals()。如果你可以想出一个_standard_'SetEditor',那么请提供它! –

3

我已经点和路线(一条路线包含N个点)来完成它:

路线(复合):

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

路线(服务器端):

@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

我明白你的意思,但问题是: 鉴于PointProxy有几个字段和一个编辑器自我如何连接点? 并注意,问题是关于Set 而不是列表列表编辑在GWT SDK中给出的帮助类和相应的示例代码是微不足道的。 –

+0

忘了提及RouteProxy(EntityProxy)和PointProxy(ValueProxy)。这两个答案都加上了。试着用Set来代替List。 –