-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 回答