我有一个Vaadin标签页。所有标签都可以关闭。我已经定义了一个自定义的CloseHandler。当通过小x按钮关闭Tab时,CloseHadler会执行;但是,如果我以编程方式关闭选项卡
TabSheet parent = (TabSheet) this.getParent();
parent.removeTab(parent.getTab(this));
关闭处理程序不会执行。有没有办法在删除Tab之前强制执行CloseHandler。
谢谢,
奥利弗
答案 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岁了......