Web サイト上のナビゲーションを JSF ハンドラーによって制御することで、あるページから別のページにユーザーを転送したり、ページ間でデータの受け渡しを行ったりすることができます。 このようなページ・ナビゲーション制御を行うために、EGL は JavaServer Faces (JSF) のナビゲーション機能と緊密な連携を行います。
EGL は、別のページにナビゲートするために、「URL に転送 (forward to URL)」と、デフォルトの「ラベルに転送 (forward to label)」の 2 つの方法を備えています。 「URL に転送 (forward to URL)」を使用するときには、ターゲット・ページを示す絶対 URL または相対 URL を指定します。 「ラベルに転送 (forward to label)」を使用するときには、 結果としてターゲット・ページを指すナビゲーション規則を指定します。 EGL アプリケーションのページ間でナビゲートするときには、「ラベルに転送 (forward to label)」を使用し、別のアプリケーションの Web ページにナビゲートするときには、「URL に転送 (forward to URL)」を使用します。
JSF サーブレットは、forward ステートメント または redirect ステートメントのいずれかを実行することで、forward ステートメントに応答します。JSF リダイレクトは、ユーザーの Web ブラウザーに対して、別のターゲット・ページをロードするようにプロンプトを出します。これは、ユーザーが新しい URL をブラウザーのアドレス・バーに入力した場合と同じ結果となりますが、最初のページに渡された何らかの要求情報の欠落も含まれることになります。 JSF 転送 (EGL forward ステートメントと混同しないでください) は、新規ページをブラウザーにロードしますが、ロケーションが変更されたことはブラウザーに示しません。 JSF 転送の場合、ブラウザーは元のページ・ロケーションにいると考えていますが、ブラウザーは 新規のターゲット・ページを表示しています。 この場合、要求情報は、新規ターゲット・ページで使用できます。 ただし、ブラウザーおよびサーブレットは同期していません。これは、ブラウザーが、サーブレットから要求したものとは同じページを表示していないためです。 この不一致により問題が発生する可能性があります。例えば、画像やスタイルシートなどのファイルへの相対リンクは、転送先のターゲット・ページではなく、元のページに対して相対的でなければなりません。これは、ブラウザーが、そのリンクを元のページに対して相対的と解釈するからです。
JSF ハンドラーの onConstructionFunction プロパティー、onPreRenderFunction プロパティー、または onPostRenderFunction プロパティーで定義された関数では、 forward to URL を使用することはできますが、forward to label は使用できません。
EGL アプリケーション内でページからページへ ナビゲートするときは、「ラベルへ転送 (forward to label)」を使用します。 あるページから別のページへユーザーを転送するには、ターゲット・ページを 指す JSF ナビゲーション規則の名前を認識しておく必要があります。デフォルトでは、ページを指すナビゲーション規則の名前は、そのページを管理する JSF ハンドラーの名前と同じになります。
forward to label "myPage";
<navigation-case>
<from-outcome>myPage</from-outcome>
<to-view-id>/myPage.jsp</to-view-id>
</navigation-case>
ナビゲーション規則には、ルールのラベルと、ターゲット・ページへの相対リンクの 2 つのストリングがあります。
このケースでは、ラベルは myPage で、リンクは、ナビゲーション規則を使用したページと同じディレクトリーにある、名前が myPage.jsp のページを参照します。
最初にスラッシュがあり、その後にページのファイル名が続くことに注意してください。これは、ナビゲーション規則の要件です。
このナビゲーション規則は、前述のとおり JSF 転送となります。<navigation-case>
<from-outcome>myPage02</from-outcome>
<to-view-id>/../myProject02/myPage02.jsp</to-view-id>
<redirect/>
</navigation-case>
<redirect/> タグは、別のプロジェクトのターゲット・ページを指すナビゲーション規則で必要になります。
あるプロジェクトのページから別のプロジェクトのページにナビゲートするときに、JSF は、転送ではなくリダイレクトを使用します。forward to URL "http://www.ibm.com";
forward to URL "../myPage02.jsp";
forward to URL "/myProject02/myPage02.jsp";
EGL JSF ハンドラーで制御されるページへの転送を行う際には、必ず正しい拡張子 (.faces または .jsp のいずれか) を使用してください。これらの拡張子の説明は、サーバーでの Web ページの実行にあります。