-1

ユーザーが多くの基準でいくつかの Item を検索できるようにするサービスがあります。

これらの基準を表すクラスがあります。

public class ItemFilter{

  private Integer idCountry;
  private Integer minPrice;
  private Integer maxPrice;
  ...

  //Getters and Setters
}

次に、エディターを使用してこのフィルターのプロパティを編集します。

public class ItemFilterEditor extends Composite implements Editor<ItemFilter> {

  ComboBox<Country> country;
  NumberField<Integer> minPrice;
  NumberField<Integer> maxPrixe;
  ...

}

ここでの問題は、ユーザーが国を選択できるようにするには ComboBox が必要ですが、クラス ItemFilter は国の ID しか受け入れないことです。

質問 : エディターがフラッシュされたときに ItemFilter の idCountry を自動的に設定する方法はありますか?

私が見つけた唯一の解決策は、中間クラスを作成してマッピングを行うことです...

4

1 に答える 1

1

エディタに と でマッピングを実装しValueAwareEditorてもらいます。setValueflush

public class ItemFilterEditor extends Composite implements ValueAwareEditor<ItemFilter> {

  @Editor.Ignore ComboBox<Country> country;
  NumberField<Integer> minPrice;
  NumberField<Integer> maxPrixe;
  ...

  private ItemFilter value;

  @Override
  public void setValue(ItemFilter value) {
    this.value = value;
    // select the item in country with ID equal to value.getIdCountry()
  }

  @Override
  public void flush() {
    this.value.setIdCountry(/* get the ID of the selected country */);
  }
}

または、代わりに aLeafValueEditor<Integer>を使用してマッピングを行います。

public class ItemFilterEditor extends Composite implements Editor<ItemFilter> {

  @Editor.Ignore ComboBox<Country> country;
  final LeafValueEditor<Integer> idCountry = new LeafValueEditor<Integer>() {
    @Override
    public void setValue(Integer value) {
      // select the item in country with ID equal to value
    }

    @Override
    public Integer getValue() {
      return /* get the ID of the selected country */);
    }
  };

  NumberField<Integer> minPrice;
  NumberField<Integer> maxPrixe;
  ...

}
于 2013-05-03T09:27:44.997 に答える