ваадин локализация для перечислений - PullRequest
2 голосов
/ 25 ноября 2011

В настоящее время я работаю над проектом с использованием vaadin ... пока все работает, кроме локализации абстрактных компонентов выбора (группа параметров, выпадающий список, выпадающие списки и т. Д.), В которых элементы выбора относятся к типам enum. Я использовал подход использования контейнеров:

private Container buildFundTransferTypeContainer() {
        Container container = new IndexedContainer();
        container.addContainerProperty("label", String.class, "");
        container.addContainerProperty("value", FundTransferType.class, null);
        for (FundTransferType type : FundTransferType.values()) {
            Object id = container.addItem();
            container.getContainerProperty(id, "label").setValue(
                    MessageResource.getLocalizedString(type.name()));
            container.getContainerProperty(id, "value").setValue(type);
        }
        return container;
    }

тогда поле задается с помощью:

fundTransferTypeField.setContainerDataSource(buildFundTransferTypeContainer());
fundTransferTypeField.setItemCaptionPropertyId("label");

, чтобы свойство «label» использовалось для отображения. до сих пор это работает с точки зрения отображения локализованных значений в браузере, однако я получаю

com.vaadin.data.Buffered$SourceException
...
Caused by: com.vaadin.data.Buffered$SourceException
    at com.vaadin.ui.AbstractField.commit(AbstractField.java:261)
    at com.vaadin.ui.Form.commit(Form.java:339)
    ... 34 more
Caused by: com.vaadin.data.Property$ConversionException: java.lang.NoSuchMethodException: net.novenix.tgsmango.core.enums.FundTransferType.<init>(java.lang.String)
    at com.vaadin.data.util.MethodProperty.convertValue(MethodProperty.java:697)
    at com.vaadin.data.util.MethodProperty.setValue(MethodProperty.java:666)
    at com.vaadin.ui.AbstractField.commit(AbstractField.java:256)
    ... 35 more
Caused by: java.lang.NoSuchMethodException: com.sample.project.core.enums.FundTransferType.<init>(java.lang.String)
    at java.lang.Class.getConstructor0(Class.java:2706)
    at java.lang.Class.getConstructor(Class.java:1657)
    at com.vaadin.data.util.MethodProperty.convertValue(MethodProperty.java:690)
    ... 37 more

когда в форме вызывается коммит. Как следует обрабатывать локализованные значения для этих компонентов vaadin. Спасибо за ответы

1 Ответ

3 голосов
/ 29 ноября 2011

Вот решение, которое я использовал.на фабрике полей или когда всякий раз, когда вы создаете поле,

ComboBox accountStatusChoice = new ComboBox();

accountStatusChoice.setCaption(MessageResource.getLocalizedString("caption.accountStatus"));
accountStatusChoice.setRequired(true);
accountStatusChoice.setRequiredError(MessageResource.getLocalizedString("error.required.accountStatus"));
accountStatusChoice.setImmediate(true);

for (AccountStatus accountStatus : AccountStatus.values()) {
    accountStatusChoice.addItem(accountStatus);
    accountStatusChoice.setItemCaption(accountStatus, MessageResource.getLocalizedString(accountStatus.name()));
}

return accountStatusChoice;

в этом коде, MessageResource.getLocalizedString ("resourceKey") является моим классом util для извлечения локализованных строк через пакет ресурсов.при добавлении содержимого поля со списком (или какого-либо компонента abstractSelect, который вы хотите использовать) используйте addItem, чтобы добавить значение объекта, которое вы хотите использовать, и используйте setItemCaption (itemId, captionString), чтобы установить заголовок, видимый для пользователя.

Элемент beanItem, который вы будете использовать для своей формы, просто должен будет иметь свойство Enum (в данном случае переменную экземпляра AccountStatus).когда фиксация вызывается в форме, она больше не выбрасывает com.vaadin.data.Buffered $ SourceException.

...