開発者は動的にページへ(org.zkoss.zk.ui.Page)イベントリスナを追加できます。一度付加されると、指定したページのコンポーネントに名前が指定されたすべてのイベントはリスナへ送られます。
すべてのページイベントリスナは即時に作動するものではありません。つまりisArapメソッドは無視されます。
代表的な例はページ単位のイベントリスナを使用して、以下のように”変更フラグ”をコントロールします。
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;
}
}
【メモ】:Deferrable インターフェイスを実装するかどうかはこの例の中ではオプションです。それはページイベントリスナはDeferrable を実装しなくてもデフォルトでも可延であるからです。