Как заставить 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