问题是:我有一个bean,这个bean有一个enum属性:
enum E {
ONE, TWO, THREE;
}
class A implements Serializable {
public E foo;
}我想使用GWT编辑器框架让用户编辑这个bean
public class P extends FlowPanel implements Editor<A> {
// ... UiBinder code here ...
@UiField RadioButton one, two, three;
// ...
}我有个错误:
错误-在代理类型com.company.A中找不到路径1的getter 错误-在代理类型com.company.A中找不到路径2的getter 错误-在代理类型com.company.A中找不到路径3的getter
在GWT 2.2中,有什么方法可以让这一点发挥作用吗?
发布于 2011-02-13 21:39:06
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;
}
}发布于 2011-02-13 16:24:07
问题不在于这件事。编译器正在寻找类似bean的getter方法,这些方法对应于uiFields 1、2和3。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;}
}要将一组无线电按钮映射到单个枚举属性(及其相应的getter/setter),您必须实现自己的编辑器,包装无线电按钮组,并返回E类型的值。它需要实现一个类似于IsEditor<LeafValueEditor<E>>的接口。
有一个关于GWT集团的相关讨论
https://stackoverflow.com/questions/4984920
复制相似问题