强制Vaadin选项卡使用CloseHandler

时间:2015-12-21 17:37:57

标签: vaadin

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

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

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

谢谢,

奥利弗

1 个答案:

答案 0 :(得分:0)

解决方案是扩展TabSheet类并覆盖removeTab()以强制它执行closeHandler。由于TabSheet.closeHandler是私有的,您还需要覆盖此字段及其setter。 Vaadin可以使事情更简单(将closeHandler更改为protected或提供吸气剂),但我不认为它是一种“肮脏”的解决方案。

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)创建功能请求,可能默认情况下应调用closeHandler。已经有#10555,但已经3岁了......