强制Vaadin选项卡使用CloseHandler
我有一张瓦丁牌的床单。所有选项卡都可以关闭。我已经定义了一个自定义CloseHandler。当通过小x按钮关闭选项卡时,CloseHadler执行;但是,如果以编程方式关闭选项卡强制Vaadin选项卡使用CloseHandler,vaadin,Vaadin,我有一张瓦丁牌的床单。所有选项卡都可以关闭。我已经定义了一个自定义CloseHandler。当通过小x按钮关闭选项卡时,CloseHadler执行;但是,如果以编程方式关闭选项卡 TabSheet parent = (TabSheet) this.getParent(); parent.removeTab(parent.getTab(this)); 关闭处理程序不执行。是否有办法在移除选项卡之前强制执行CloseHandler 谢谢 Oliver一个解决方案是扩展选项卡类,重写remove
TabSheet parent = (TabSheet) this.getParent();
parent.removeTab(parent.getTab(this));
关闭处理程序不执行。是否有办法在移除选项卡之前强制执行CloseHandler
谢谢
Oliver一个解决方案是扩展
选项卡类,重写removeTab()
,强制它执行closeHandler
。由于TabSheet.closeHandler
是私有的,因此您需要覆盖此字段及其设置程序。Vaadin可以使事情变得更简单(将closeHandler
更改为protected
或提供getter),但我不认为它是一个“肮脏”的解决方案
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()上创建一个功能请求,默认情况下可能应该调用closeHandler
。已经有了,但它已经3年了…如果您查看,您会注意到TabSheet
的构造函数定义了一个默认的CloseListener
,它只调用TabSheet.removeComponent(c)
,这就是removeTab(Tab-Tab)
所做的。猜猜如果一个打电话给另一个会发生什么:-)。在这种情况下,我的结论是,除了自己实际调用CloseHandler
之外,没有其他(干净、简单)的编程方式触发它的执行。谢谢您的回复<代码>选项卡。removeComponent(c)
给出了相同的行为。我希望能够通过发送CloseEvent调用CloseHandler,比如,但是我在文档中没有看到任何允许我这样做的内容。我想我必须想出一个肮脏的解决办法。。。