Как извлечь BaseModel или BeanModel из BeanModelMarker - PullRequest
0 голосов
/ 26 марта 2012

Я следовал инструкциям:

  1. создать боб. Этот bean-компонент предназначен для перечисления перечисления с сервера на клиент с помощью RestyGWT.

    public enum Mode{
      MODIFY,
      EDIT,
      DELETE,
      CREATE
    }
    
  2. Определение маркера на бобе.

    @BEAN(Mode.class)
    static public class ModelMarker implements BeanModelMarker { }
    
  3. (Перефразируя утверждение из блога GXT) Теперь используйте BeanModelMarker для любого компонента данных.

    Итак, я создал поле со списком.

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

    Упс, ComboBox не принимает BeanModelMarker в качестве типа модели. И это, безусловно, неправильно, потому что он еще не был создан GWT.

И что мне делать с экземпляром, созданным GWT?

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

Я не могу найти какую-либо литературу, которая явно говорит мне, что делать с BeanModelMarker после его определения. Как мне это использовать?

Я хотел бы знать, что мне нужно сделать, чтобы определить Бин или Базовую модель, чтобы я мог использовать перечисление в моем управляемом данными комбо-боксе.

Правильно ли я задаю вопрос о BeanModelMarker? Относится ли это к моей попытке создать комбинированное окно, управляемое перечислением?

1 Ответ

1 голос
/ 26 марта 2012

Пара мыслей:

Вот обсуждение на форумах GXT об упаковке типов enum в комбинированные списки.http://www.sencha.com/forum/showthread.php?67317-Enum-based-ComboBox. Используется несколько подходов - в этом потоке я остановился на подходе создания EnumWrapper и некоторых статических удобных методах для создания List<EnumWrapper<MyEnum>> коллекций, которые передаются в поле со списком ListStore.Одна из основных причин, по которой я пошел на это, в отличие от подхода BeanModel, заключалась в том, что мне нужно, чтобы мои перечисления были способны поддерживать i18n, и не хотел, чтобы эта логика i18n была в самом перечислении.

Более подходящим для вашего вопроса является правильный способ перевода java-объекта в BeanModel - использовать экземпляр BeanModelFactory, предоставленный из BeanModelLookup.getFactory(Mode.class).ModelMarker - это просто интерфейс, и он не может реализовать ModelData, поэтому ваше объявление ComboBox<ModelMarker> не имеет смысла.Помните, что использование этого подхода означает, что ваше перечисление Mode должно предоставлять геттеры, чтобы код генерации 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()));
...