如何从BeanModelMarker派生BaseModel或BeanModel

时间:2012-03-26 19:22:28

标签: java gwt gxt

我按照说明操作:

  1. 创建bean。这个bean用于使用RestyGWT从服务器传输到客户端的枚举。

    public enum Mode{
      MODIFY,
      EDIT,
      DELETE,
      CREATE
    }
    
  2. 在bean上定义标记。

    @BEAN(Mode.class)
    static public class ModelMarker implements BeanModelMarker { }
    
  3. (从GXT博客中解释声明)现在在任何数据组件上使用BeanModelMarker。

    所以,我创建了一个组合框。

    static private ComboBox<ModelMarker> propertyTypeComboBox =
      new ComboBox<ModelMarker>();
    

    Ooops,ComboBox不接受BeanModelMarker作为Model类型。它肯定是错的,因为它尚未创建GWT。

  4. 那么我如何处理GWT创建的实例呢?

    static ModelMarker beanModel =
      GWT.create(ModelMarker.class);
    

    在找到BeanModelMarker之后,我无法找到任何明确告诉我如何使用BeanModelMarker的文献。我该如何使用它?

    我想知道我需要做什么来定义Bean或Base模型,这样我就可以在我的数据驱动组合框中使用枚举。

    我是否以正确的方式提出有关BeanModelMarker的问题?这与我创建枚举驱动的组合框的尝试有关吗?

1 个答案:

答案 0 :(得分:1)

几点想法:

以下是关于在ComboBox中包装enum类型的GXT论坛的讨论。 http://www.sencha.com/forum/showthread.php?67317-Enum-based-ComboBox。使用了几种方法 - 在该线程中,我采用了制作EnumWrapper的方法,以及一些静态便捷方法来创建List<EnumWrapper<MyEnum>>集合以提供给组合框ListStore。与BeanModel方法相反,我采用的主要原因之一是我需要我的枚举能够支持i18n,并且在枚举本身中并不需要i18​​n逻辑。

与您的问题更相关,将java对象转换为BeanModel的正确方法是使用BeanModelFactory提供的BeanModelLookup.getFactory(Mode.class)实例。 ModelMarker只是一个界面,无法实现ModelData,因此您的ComboBox<ModelMarker>声明并不真正有意义。请记住,使用此方法意味着您的Mode枚举需要公开getter,以便BeanModel代代码能够发挥其反射效果(如http://www.sencha.com/forum/showthread.php?67317-Enum-based-ComboBox&p=332996&viewfull=1#post332996中所示)。

ComboBox<BeanModel> modeCombo = new ComboBox<BeanModel>();
ListStore<BeanModel> store = new ListStore<BeanModel>();

// this next line might need ModelMarker.class instead, its been a while
BeanModelFactory modeFactory = BeanModelLookup.get().getFactory(Mode.class);


// either add items one at a time
Mode mode = Mode.EDIT;
store.add(modeFactory.createModel(mode));

// or add a collection
store.add(modeFactory.createModel(Arrays.asList(Mode.values()));