2012-05-26 6 views
5

は、簡略化のために:セット<?を編集するには? EntityProxy>をGWT Editorフレームワークで拡張しますか?

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

に一致する私はAddressProxy を編集するUiBuinderクラスを持って、それが私には明確な方法でListEditorを使用する方法リストを持っていてもPersonクラスにデータが設定されている場合 エディタフレームワークを編集するにはどうすればいいですか? PersonProxyになったときにSetをListに変換するにはどうすればよいですか?

は私がリストにLeafValueEditor.setValue()移動の内部で、その後

LeafValueEditor<Set<AddressProxy>> 

とを実装し、アダプタエディタクラスの種類を入れて、新しいdriver.editを開始しようとする試みをしました()でリストの編集を担当する別のエディタ階層ですが、運がいいです。

答えて

6

ListEditorに似ていますが、Listの代わりにSetを処理すると、CompositeEditor<Set<AddressProxy>, AddressProxy, AddressEditor>を作成する必要があります。 私は本当にわからないが、何とかListEditorに委任できると思う。

+0

ありがとう!これはまず何かです。率直に言って、私はいくつかのコードへのリンクを望んでいました:-)。 –

+1

標準の 'SetEditor'(おそらく' ListEditor'への委任)のいくつかのタイプはGWTによって提供されるべきだと思います。私はOPと同じ問題を抱え、 'ListEditor'を使うことができるように、ドメインクラス上で' List'型アクセサ(実際の 'Set'型プロパティを変換する)を公開することになりました。しかし、必ずしもできるとは限りません(時には、クライアント側で 'Set'の振る舞いが必要なだけです)。 –

+2

問題は、a)定義による定義に特定の順序はなく、値のサブエディタは必ず_list_です。 b)おそらく、編集中に重複値を許可し、_flush_時間にのみ一意性をチェックしたい場合は、ユーザーに何かを伝える必要があります(「ちょっと、私は4つの値を持っていました。そのうちの!");一意性は、編集したオブジェクトで 'equals()'をどのように実装したかによって異なります。あなたが_standard_ SetEditorを考え出すことができるなら、それを投稿してください! –

3

私は(1ルートは、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にはいくつかのフィールドがあり、そのエディタを使ってどのように点を接続するのでしょうか? そして、質問が約リストではないことに注意してくださいリスト GWT SDKと対応するサンプルコードでヘルパークラスを与えられたリストの編集は簡単です。 –

+0

RouteProxy(EntityProxy)とPointProxy(ValueProxy)は忘れてしまった。どちらも答えに加えられました。 Listの代わりにSetを使ってみてください。 –

関連する問題