Требуется обработать событие нажатия на всех компонентах в UI. Пошел следующим путем, через Vaadin component extension:
Создал класс
public class MyComponentExtension extends AbstractExtension {
public MyComponentExtension(AbstractClientConnector target) {
extend(target);
}
public static MyComponentExtension extendWith(AbstractClientConnector component) {
return new ComponentExtension(component);
}
}
и создал класс в widget-toolset
@Connect(MyComponentExtension.class)
public class MyComponentExtensionConnector extends AbstractExtensionConnector {
@Override
protected void extend(ServerConnector target) {
Widget widget = ((ComponentConnector) target).getWidget();
widget.addDomHandler(event -> System.out.println("some handled event"), ClickEvent.getType());
}
}
После этого расширил имплементацию интерфейса UiComponents:
public class MyComponentUiComponents extends WebUiComponents {
@Override
public <T extends Component> T create(String name) {
T component = super.create(name);
AbstractClientConnector unwrapComponent = component.unwrap(AbstractClientConnector.class);
MyComponentExtension.extendWith(unwrapComponent);
return component;
}
@Override
public <T extends Component> T create(Class<T> type) {
T component = super.create(type);
AbstractClientConnector unwrapComponent = component.unwrap(AbstractClientConnector.class);
MyComponentExtension.extendWith(unwrapComponent);
return component;
}
@Override
public <T extends Component> T create(TypeToken<T> type) {
T component = super.create(type);
AbstractClientConnector unwrapComponent = component.unwrap(AbstractClientConnector.class);
MyComponentExtension.extendWith(unwrapComponent);
return component;
}
}
в web-spring.xml прописал подмену:
<bean id="cuba_UiComponents" class="com.haulmont.uiaudit.web.common. MyComponentUiComponents"/>
Путем добавления логирования в MyComponentUiComponents проверил что подмена работает. Прошу помочь разобраться что нужно добавить чтобы отработало событие ClickEvent в расширении