Как заставить Metawidget отображать виджет выбора даты вместо виджета числа для свойств отметки времени?

Metawidget создает виджеты выбора даты, если тип свойства java.util.Date. В моем случае POJO содержит метки времени типа long.

public class Node {
    private long created;
    private long lastModified;
    /* ... */
}

Node node = new Node();
VaadinMetawidget metawidget = new VaadinMetawidget();
metawidget.setToInspect(node);

Как настроить метавиджет так, чтобы определенное длинное свойство отображалось как виджет выбора даты?

1 ответ

Решение

Вы должны подключить пользовательский WidgetBuilder, чтобы сделать это. Вашему пользовательскому WidgetBuilder нужно беспокоиться только о создании виджета Date для "long", и он может вернуть null для всего остального:

Ваш пользовательский WidgetBuilder должен выглядеть примерно так:

public class MyWidgetBuilder implements WidgetBuilder<Component, VaadinMetawidget> {
    public Component buildWidget( String elementName, Map<String, String> attributes, VaadinMetawidget metawidget ) {
        if ( "long".equals( attributes.get( TYPE ))) {
            return new PopupDateField();
        }
        return null;
    }

}

Затем вы оборачиваете его внутри CompositeWidgetBuilder, чтобы Metawidget "возвращался" к обычному VaadinWidgetBuilder для всего остального. Вот пример: http://metawidget.org/doc/reference/en/html/ch02s04.html

VaadinMetawidget уже имеет некоторые стандартные WidgetBuilder s, так что вы можете включить их тоже. Вот значения по умолчанию: http://metawidget.org/doc/reference/en/html/ch02s04.html

Другие вопросы по тегам