ブラウザ履歴へ状態を付加したら、ユーザーはBACKボタンを押すといったことでこれらの状態の中で切り替えられます。
状態が変更されたら、ZKはデスクトップの中のすべてのルートコンポーネントに onBookmarChanged イベント(org.zkoss.zk.ui.event.BookmarkEventクラスのインスタンス)をブロードキャストし、アプリケーションに通知します。
従来の複数ページのウェブアプリケーションとは違って、状態が変更されたら、ZKデスクトップを手動で処理しなければなりません。デスクトップを処理して、ブックマークをあらわす状態に反映させるのはアプリケーション開発者の仕事です。
onBookmarkChangedイベントを監視するには、デスクトップのページにイベント付加するか、ルートコンポーネントに付加します。
<window onBookmarkChange="goto(event.bookmark)">
<zscript>
void goto(String bookmark) {
if ("Step-2".equals(bookmark)) {
...//create components for Step 2
} else { //empty bookmark
...//create components for Step 1
}
</zscript>
</window>
他のイベントを操作するように、onBookmarkChangedイベントを受け取るとき、デスクトップを自由に処理できます。
最も一般的な方法は、org.zkoss.zk.ui.Executions クラスのcreateComponents メソッドを使用することです。
つまり、それぞれのページをそれぞれのZUMLページで表現することができます。
そして、creatComponentsを使用して、onBookmarkChangedを受け取るとき、すべてのコンポーネントを作成します。
if ("Step-2".equals(bookmark)) {
//1. Remove components, if any, representing the previous state
try {
self.getFellow("replacable").detach();
} catch (ComponentNotFoundException ex) {
//not created yet
}
//2. Creates components belonging to Step 2
Executions.createComponents("/bk/step2.zul", self, null);
}