2011-04-16 151 views
3

我试图找出如何使用GWT编辑器时,我的模型有一个字段是一个集合,列表等如何使用GWT编辑器框架编辑多值字段?

我有这样的实体代理:

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; 
    } 
} 

基本上我只是无法弄清楚如何得到一个集(我已经试过清单以及)领域与GWTs编辑框架工作。到目前为止,调试显示值正确地从编辑器中出来。

我曾看过ListEditor,但看起来像它用来编辑一个更复杂的对象类型列表;不是具有多个可能值的单个字段。我正在实施错误的编辑器类型? GWT编辑器无法处理集合的字段吗?

回答

1

哎呀!我有的代码将正常工作。我简化了我的实际情况,并最终发现了我的错误。我真正的实体代理看起来更像:

public interface MyModel { 
    // BrokerType is an enum 
    void setBrokerTypes(Set<BrokerType> brokerTypes); 
    Set<BrokerType> getBrokerTypes(); 
} 

ListBox始终将值作为字符串返回!所以编辑框架可能很难找出如何将Set<String>转换为Set<BrokerType>。宁愿看到一个错误,而不是沉默的失败,但是哦。

这就是我首先扩展ListBox的原因(为了处理更复杂的类型),所以我想我需要在编译器框架知道该如何处理Set之前得到这个工作。