IBM® Web サイト (http://www.ibm.com) にアクセスし、次に IBM Rational® Cafe (http://www.ibm.com/rational/cafe) にアクセスする場合を考えます。 リモート・サーバーから 2 つの異なる Web ページが提供され、ブラウザーの「戻る」ボタンおよび「進む」ボタンをクリックすると、2 つのサイトそれぞれに再度アクセスできます。対照的に、Rich UI アプリケーションのメイン処理は、ブラウザー内のみで行われます。アプリケーションで新規コンテンツをレンダリングでき、またサーバーにアクセスして表示を更新することもできます。しかしほとんどの場合、「戻る」および「進む」ボタンは使用不可になっているかまたは他の Web サイトの処理に直接進みます。
Rich UI では、別個の Web ページとして識別するために、スクリーンの内容を決定できます。この決定は、履歴内の関数にアクセスすることによって施行します。履歴は、製品に付属する Rich UI ハンドラー・パーツです。履歴を使用すると、実行時にページをブラウザー履歴に割り当てることができ、ユーザーは「戻る」および「進む」ボタンを使用して、アプリケーションのさまざまなページにアクセスできます。また、ユーザーがブラウザーを閉じようとしているときに応答することもできます。
ブラウザー履歴メカニズムでは、指定された Web ページの状態は保存されません。 アプリケーションにとって意味のある振る舞いをコーディングする必要があります。
import com.ibm.egl.rui.history.History;
import com.ibm.egl.rui.history.HistoryChanged;
import com.ibm.egl.rui.history.OnBeforeUnloadMessageFunction;
Handler MyApplication Type RUIHandler { onConstructionFunction=start }
myHistory History {};
end
履歴に基づいて変数を宣言することによって、ユーザーのブラウザーに表示される Web アドレスに #empty を追加します。その後の処理では、empty は新規ページの名前です。新規ページは、アプリケーション固有のブラウザー履歴には追加されますが、ブラウザー自体の履歴には追加されません。ブラウザー自体の履歴には、オリジナルの Web アドレスのみが保持されます。
myHistory.addListener(myHistoryChanged);
Delegate
HistoryChanged(newPageName String in)
end
上記では、新規ページ・イベントのイベント・ハンドラーは文字列を受け入れます。addListener を起動してカスタム関数を参照する場合、カスタム関数は次の場合に起動されます。つまり、ブラウザーによって empty という名前の初期ページが追加されたとき、および後続ページをユーザーが追加したときです。それぞれの場合では、ユーザーのブラウザーには Web アドレスが表示され、ページ名が含まれています。ページ名は、ポンド記号 (#) に続いて表示されるアドレス・サブセットです。また、EGL ランタイムでは、ユーザーの関数にこのページ名が提供されます。
function myHistoryChanged(newPageName String in)
myLabel.text = "History was changed. Current page name is "+ newPageName;
end
複数の新規ページ・イベント・ハンドラーを登録するには、addListener を複数回実行します。参照される関数は、登録順に実行されます。同じ関数を複数回登録した場合でも、すべての登録が有効です。
history.keepUserOnPage(stayHere);
Delegate
OnBeforeUnloadMessageFunction() returns(String)
end
上記では、ブラウザー・クローズ・イベントのイベント・ハンドラーから文字列が戻されます。その文字列はダイアログ・ボックスに表示され、ブラウザーのクローズをユーザーが確認したり取り消したりできます。
function stayHere() returns(String)
return ("Close the application?");
end
myHistory.addToHistory("myNewPage");
アプリケーションの前ページにナビゲートできます。以下にコードの例を示します。
myHistory.goBack();
アプリケーションの次ページにナビゲートできます。以下にコードの例を示します。
myHistory.goForward();