我有一项服务,使用户能够搜索一些具有许多标准的项目。
我有一个代表那些标准的课程:
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?
我找到的唯一解决方案是创建一个中间类并进行一些映射......
答案 0 :(得分:1)
让您的编辑器实施ValueAwareEditor
并在setValue
和flush
中进行映射。
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 */);
}
}
或者使用LeafValueEditor<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;
...
}