2011-04-16 208 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之前得到這個工作。