5

为了简单起见:

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 时,我如何将 Set 转换为 List?

我尝试放置一种可以实现的适配器编辑器类

LeafValueEditor<Set<AddressProxy>>

然后在 LeafValueEditor.setValue() 内部移动到一个 List 并在一个单独的 Editor 层次结构上启动一个新的 driver.edit() ,该层次结构负责 List 编辑,但现在很幸运。

4

2 回答 2

6

您应该创建一个CompositeEditor<Set<AddressProxy>, AddressProxy, AddressEditor>,类似于 aListEditor但处理 aSet而不是 a List。我想你可以以某种方式委托给 aListEditor虽然我真的不确定。

于 2012-05-26T09:14:18.587 回答
3

我已经用点和路线完成了(一条路线包含 N 点):

路线(复合):

@UiField
TextBox name;

@Ignore
@UiField
FlexTable listPoints;

PointsEditor pointsEditor = new PointsEditor();

     ....

pointsEditor.add(String id);

积分编辑:

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

路由代理

public interface RouteProxy extends EntityProxy {

       abstract List<PointProxy> getPoints();

       abstract void setPoints(List<PointProxy> points);

点代理

public interface PointProxy extends ValueProxy {

...

}
于 2012-05-26T21:24:17.890 回答