0

重要な編集:私の問題をよりよく反映するために、状況に深さレベルを追加しました。

特定のタイプの ListStore を持つ GXT Grid がありFooます。Footype の 1 つを含む、いくつかの重要なオブジェクト プロパティがありますBar。Typeは、 typeとtypeBarの 2 つのオブジェクト プロパティで構成されます。これら 2 つはプロパティであり、プロパティを持つことができます。fooFooFooFoobarBarBarbarnullStringdescription

スケッチ

GXT グリッドのフィルタリングを使用して、値または説明でFooオブジェクト レコードをフィルタリングしたいと考えています。BarFooFooBarBar

に を追加しようとした結果、次のValueProvider<Foo, String> barDescription();ようになりました。FooProperties

StringFilter<Foo> barbarFilter = new StringFilter<Foo>(fooProps.barbarDescription());

これ Foo#getBarBarDescription() は次のように実装されています。

public String getBarBarDescription() {
    return this.getBar().getBarBar().getDescription();
}

GXT でこの動作を実装する簡単で便利な方法はありますか? 私はそれを見つけていません。

上記の実装は私が試したものですが、フィルターはグリッドにまったく表示されず、それ以上のエラー メッセージは表示されません。

以前のバージョンの質問に対するコリンの回答に応えて、次のことを試しました。

@Path("bar.barbar.description")
ValueProvider<Foo, String> barbarDescription();

を呼び出すことを望んでいますFoo#getBar().getBarBar().getDescription()。FooFoo と BarBar がnull問題を引き起こしている可能性があると思います。

4

1 に答える 1

1

オブジェクトをbarDescription()呼び出したい場合は、これを試してgetBar().getDescription()ください:Foo

public interface FooProperties extends PropertyAccess<Foo> {

  @Path("bar.description")
  ValueProvider<Foo, String> barDescription();

  //...
}

ここでの@Path注釈は、エディター フレームワークと同じように機能します。これを使用して、アクセスしたいプロパティへのパスを指定できます。これにより、独自のオブジェクトでのgetBarDescription()メソッドの作成をスキップできます。Foo

ValueProvider別のオプションは、独自の実装を構築することです。を使用PropertyAccessすることは、コンパイラに作業を依頼する方法ですが、自分で行うことを妨げるものは何もありません。この場合、次のようになります。

public class FooBarDescriptionValueProvider implements ValueProvider<Foo, String> {
  public String getValue(Foo object) {
    //TOOD consider a object.getBar() null check?
    return object.getBar().getDescription();
  }
  public void setValue(Foo object, String value) {
    object.getBar().setDescription(value);
  }
  public String getPath() {
    return "bar.description";
  }
}

これは、PropertyAccess で生成されたバージョンとほぼ同じですが、必要に応じて動作をカスタマイズできることに注意してください。

于 2013-05-07T14:31:32.803 に答える