强制 Vaadin Tabsheet 使用 CloseHandler

Forcing a Vaadin Tabsheet to use the CloseHandler

我有一个 Vaadin 标签表。所有选项卡都是可关闭的。我已经定义了一个自定义的 CloseHandler。当通过小 x 按钮关闭选项卡时,CloseHadler 将执行;但是,如果我以编程方式关闭选项卡

 TabSheet parent = (TabSheet) this.getParent();
 parent.removeTab(parent.getTab(this));

关闭处理程序不执行。有没有办法在删除 Tab 之前强制执行 CloseHandler。

谢谢,

奥利弗

一个解决方案是扩展 TabSheet class 并覆盖 removeTab() 以强制它执行 closeHandler。由于 TabSheet.closeHandler 是私有的,您还需要覆盖此字段及其 setter。 Vaadin 可以使事情变得更简单(将 closeHandler 更改为 protected 或提供 getter),但我不认为它是 "dirty" 解决方案。

public class MyTabSheet extends TabSheet {

    private static final long serialVersionUID = 1L;

    private CloseHandler closeHandler;

    @Override
    public void removeTab(Tab tab) {

        if (closeHandler != null) {
            closeHandler.onTabClose(this, tab.getComponent());
        }

        super.removeTab(tab);
    }

    @Override
    public void setCloseHandler(CloseHandler handler) {
        closeHandler = handler;
        // needed for TabSheet.TabsheetServerRpcImpl
        super.setCloseHandler(handler);
    }
}

如果您愿意,可以在 Vaadin 创建一个功能请求(vaadin.com/bug), maybe the closeHandler should be called by default. There's already the #10555 但它已经 3 岁了...