簡體   English   中英

GWT,Enum,RadioButton和Editors框架

[英]GWT, Enum, RadioButton and Editors framework

這是問題:我有一個bean,這個bean有一個枚舉屬性:

enum E {
    ONE, TWO, THREE;
}

class A implements Serializable {
    public E foo;
}

我想使用GWT Editor框架讓用戶編輯這個bean

public class P extends FlowPanel implements Editor<A> {
    // ... UiBinder code here ...
    @UiField RadioButton one, two, three;
    // ...
}

我有一個錯誤:

[錯誤] [gwtmodule] - 在代理類型com.company.A中找不到路徑1的getter

[錯誤] [gwtmodule] - 無法在代理類型com.company.A中找到路徑二的getter

[錯誤] [gwtmodule] - 在代理類型com.company.A中找不到路徑3的getter

有沒有辦法在GWT 2.2中完成這項工作?

public class EnumEditor extends FlowPanel implements LeafValueEditor<E> {

    private Map<RadioButton, E> map;

    @UiConstructor
    public EnumEditor(String groupName) {
        map = new HashMap<RadioButton, E>();
        for (E e: E.class.getEnumConstants()){
            RadioButton rb = new RadioButton(groupName, e.name());
            map.put(rb, e);
            super.add(rb);
        }
    }

    @Override
    public void setValue(E value) {
        if (value==null)
            return;
        RadioButton rb = (RadioButton) super.getWidget(value.ordinal());
        rb.setValue(true);
    }

    @Override
    public E getValue() {
        for (Entry<RadioButton, E> e: map.entrySet()) {
            if (e.getKey().getValue())
                return e.getValue();
        }
        return null;
    }
}

問題不在於枚舉。 編譯器正在尋找與uiFields 1,2和3對應的類似bean的getter方法。 RadioButtons在實現IsEditor<LeafValueEditor<java.lang.Boolean>>接口時映射到布爾屬性。

這應該使您的示例代碼工作,但它顯然不是一個非常靈活的解決方案:

class A implements Serializable {
    public E foo;
    public Boolean getOne() {return foo==E.ONE;}
    public Boolean getTwo() {return foo==E.TWO;}
    public Boolean getThree() {return foo==E.THREE;}
}

要將一組radiobuttons映射到單個枚舉屬性(及其相應的getter / setter),您必須實現包含radiobutton組的自己的編輯器,並返回類型E的值。它需要實現類似的接口IsEditor<LeafValueEditor<E>>

有關GWT小組相關討論

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM