当我的模型有一个Set,List等字段时,我试图弄清楚如何使用GWT Editor。
我有这个实体代理:
public interface MyModel {
void setSomeCollection(Set<String> c);
Set<String> getSomeCollection();
}
这是我的多选字段。我正在扩展ListBox,以便稍后我可以改变它的一些行为。
public class DualListBox extends ListBox implements LeafValueEditor<Set<String>> {
public DualListBox() {
super(true);
}
@Override
public void setValue(Set<String> values) {
if (values == null) {
return;
}
for (String value : values) {
for (int i = 0; i < getItemCount(); i++) {
if (getValue(i).equals(value)) {
setItemSelected(i, true);
} else {
setItemSelected(i, false);
}
}
}
}
@Override
public Set<String> getValue() {
Set<String> values = new HashSet<String>();
for (int i = 0; i < getItemCount(); i++) {
if (isItemSelected(i)) {
values.add(getValue(i));
}
}
// Debug shows that the set of values is populated correctly..
return values;
}
}
基本上我只是想弄清楚如何使用Set(我也尝试过List)获取字段以使用GWTs Editor框架。到目前为止的调试显示值正确地来自编辑器。
我查看了ListEditor,但看起来它用于编辑更复杂的对象类型的列表;不是具有多个可能值的单个字段。我正在实现错误的编辑器类型? GWT编辑器无法处理集合中的字段吗?
答案 0 :(得分:1)
哎呀!我的代码将正常工作。我稍微简化了我的实际场景,最后我发现了我的错误。我真正的实体代理看起来更像:
public interface MyModel {
// BrokerType is an enum
void setBrokerTypes(Set<BrokerType> brokerTypes);
Set<BrokerType> getBrokerTypes();
}
ListBox总是以字符串形式返回值!因此,编辑器框架可能很难确定如何将Set<String>
转换为Set<BrokerType>
。宁愿看到错误而不是沉默失败,但是哦。好吧。
这就是我首先扩展ListBox(处理更复杂的类型)的原因,所以我想我需要在编辑框架知道如何处理Set之前让它工作。