2012-04-21 13 views
0

とキープロバイダ、私のGWTプロジェクトのためのPostgresとGWT

私は当初、一意のリストに私のレコードを識別するために*リストと*のKEY_PROVIDERを構築しました。今はListの代わりに私はPostgresデータベースに接続していて、ProvidesKeyのオブジェクトをデータベースに渡す必要があるかどうか、またはデータベースを使用しているときに完全に削除する必要があるかどうかは疑問です。

EARLIER -

// Make a provider, connect the List with the provider! 
final ListDataProvider<Contact> sortProvider = new ListDataProvider<Contact>(KEY_PROVIDER); 
sortProvider.setList(CONTACTS); 

NOW -

// Create a data provider. 
MyDataProvider sortProvider = new MyDataProvider(); 
sortProvider.addDataDisplay(table); 

私はそれが今で行われる必要があるかどうかはわかりませんよ?

は、私が代わりに

MyDataProvider sortProvider = new MyDataProvider(KEY_PROVIDER); 

をpass-する必要がありますか?

ベストプラクティスは何ですか?ありがとう!

答えて

1

よく、ProvidesKeyインターフェイスはクライアント側(GWT)でオブジェクトを識別するためにのみ使用されます。これは、リスト内のどのオブジェクトが選択されているかを知り、またCellTable/CellList内の別の行を手動で選択するために重要です。

ProvidesKey実装を指定しない場合、CellWidgetsはDTOのequals関数を使用して、等しいかどうかをチェックします。オブジェクト自体が変更されると、問題が発生する可能性があります。したがって、ProvidesKeyの実装を指定することは常に良い方法ですが、ListDataProviderAsyncDataProvider、カスタムデータプロバイダのどちらを使用するかには依存しません。

あなたの例ではMyDataProviderは何ですか?それはAsyncDataProviderのサブクラスですか?

+0

MyDataProviderはAsyncDataProviderを拡張し、AsyncCallBackを実装します – Prince

+0

したがって、私は、ProvidesKeyを使用してフロントエンドで行を一意に識別し、データベースがバックエンドのレコードをどのように処理しているかとは無関係であると推測できます可能な限り最良の方法でデータを処理するためのものです。 – Prince

+0

はい、正しいです。おそらくPostgreSQLで主キーとしてLong/sequenceを使用しています。私はあなたのDTOのクライアント側のロングフィールドを持っていると思います。このフィールドを '' ProvidesKey''と一緒に一意の識別子として使うことができます。 –

関連する問題