如果你想要在 browser tab 關掉時去執行一些應用程式邏輯,例如清理資料等等。我們可以傾聽 browser tab 關掉的事件,這件事等同於 ZK 的 desktop 被移除。 ZK 提供一個 DesktopCleanup
listener讓你可以傾聽任何一個 desktop 被移除的事件,所以只要發現你所關注的那一頁的 desktop 被移除了,那就是該 tab 被關掉了,你可以在該 listener 中實作你的應用程式邏輯。範例如下:
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.Desktop;
import org.zkoss.zk.ui.select.SelectorComposer;
import org.zkoss.zk.ui.select.annotation.Listen;
import org.zkoss.zk.ui.select.annotation.Wire;
import org.zkoss.zk.ui.util.DesktopCleanup;
import org.zkoss.zul.Div;
public class CloseComposer extends SelectorComposer<Component> {
@Wire
Div root;
@Override
public void doAfterCompose(Component comp) throws Exception {
super.doAfterCompose(comp);
//or register in zk.xml
getPage().getDesktop().addListener(new MyDesktopCleanupListener());
}
@Listen("onClick = #exit")
public void processAfterExit(){
System.out.println("processAfterClose " + root.getId());
}
class MyDesktopCleanupListener implements DesktopCleanup{
@Override
public void cleanup(Desktop desktop) throws Exception {
// 或根據 desktop.getRequestPath() 來判斷是哪一頁被關掉
if (getPage().getDesktop().equals(desktop)){
processAfterExit();
System.out.println(desktop.getRequestPath());
}
}
}
}
留言