デフォルトではクライアントで起こったイベントはサーバーに送られます。しかし、多くのイベントリスナはユーザー側で何かを表示させるよりは、ただ サーバーの状態をコントロールします。
つまりこの状態制御リスナに対して起こったイベントは即座に情報を送る必要がありません。
サーバーのパフォーマンス をあげるため、クライアントとサーバー間の通信量を最小にし、これらのリスナをまとめて送信します。便宜上これらを、可延イベントリスナと呼びます。
イベントリスナの通信を一時保留するのにorg.zkoss.zk.ui.event.Deferrableインタフェイスを実装し、以下のようにisDeferrableメソッドにtrueを返します。
public class DeferrableListener implements EventListener, Deferrable { private boolean _modified; public void onEvent(Event event) { _modified = true; } public boolean isDeferrable() { return true; } }
クライアントでイベントが発生したとき(例えば、ユーザーがリスト項目を選択したとき)、可延リスナだけが登録されているか、又は、イベントリスナが全く登録されていない場合、ZKはイベントを送信しません。代わりに、イベントはクライアント側の待ち行列に保存されます。
少なくともひとつ可延でないリスナが登録されているのであれば、イベントはすぐにすべて待ち行列にあるイベントとともにサーバーへ送られます。すべてのイベントは順番通り送信されます。
【ヒント】:可延リスナを使って、サーバーの状態を維持します。一方、ユーザー側での視覚的な変更は。不可延リスナを使用します。