有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何使用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) 个答案

  1. # 1 楼答案

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

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

    ListBox总是以字符串形式返回值!因此,编辑器框架可能很难弄清楚如何将Set<String>转换为Set<BrokerType>。我宁愿看到一个错误而不是无声的失败,但是哦,好吧

    这就是我首先扩展ListBox(以处理更复杂的类型)的原因,所以我想在编辑器框架知道如何处理集合之前,我需要让它工作起来