Developers could add event listeners to a page (org.zkoss.zk.ui.Page) dynamically. Once added, all events of the specified name the are sent to any components of the specified page will be sent to the listener.
All page-level event listeners are non-ASAP. In other words, the isArap method is ignored.
A typical example is to use a page-level event listener to maintain the modification flag as follows.
public class ModificationListener implements EventListener, Deferrable { private final Window _owner; private final Page _page; private boolean _modified; public ModificationListener(Window owner) { //Note: we have to remember the page because unregister might //be called after the owner is detached _owner = owner; _page = owner.getPage(); _page.addEventListener("onChange", this); _page.addEventListener("onSelect", this); _page.addEventListener("onCheck", this); } /** Called to unregister the event listener. */ public void unregister() { _page.removeEventListener("onChange", this); _page.removeEventListener("onSelect", this); _page.removeEventListener("onCheck", this); } /** Returns whether the modified flag is set. */ public boolean isModified() { return _modified; } //-- EventListener --// public void onEvent(Event event) throws UiException { _modified = true; } //-- Deferrable --// public boolean isDeferrable() { return true; } }
Note: Whether to implement the Deferrable interface is optional in this example, because the page's event listeners are always assumed to be deferrable, no matter Deferrable is implemented or not.