PageHandler

EGL PageHandler は、ページ・コード の 1 つの例です。 これはユーザーの Web ページとのランタイム相互作用を制御し、以下の任意のタスクを実行できます。

最も簡単な方法は、Page Designer で JSP ファイルをカスタマイズして PageHandler を作成する方法です。 詳しくは、『EGL の Page Designer サポート』を参照してください。

PageHandler そのものには、変数と、以下のようなロジックが組み込まれます。

注: OnPageLoad 関数は、PageHandler プロパティー onPageLoadFunction で識別されます。 名前は有効な任意の EGL 関数名にすることができます。 OnPageLoad 関数は、渡されたユーザー提供の任意の引数を自動的に検索します。 また、他の関数を呼び出したり、他のプログラムを呼び出したり、 追加のデータを Web アプリケーション・サーバーの要求またはセッション・オブジェクトに配置したりすることができます。 ただし、この関数は、他のページに制御を転送したり、ページをユーザーに最初に表示するときにエラー・メッセージを表示させたりすることはできません。
PageHandler の変数は、次の 2 通りの方法でアクセスされます。

PageHandler パーツはシンプルにする必要があります。 パーツには、範囲検査のような単純なデータ妥当性検査が組み込まれる場合がありますが、 他のプログラムを呼び出して、複合ビジネス・ロジックを実行することをお勧めします。 例えば、データベース・アクセスは、呼び出し先プログラムに対して予約される必要があります。

PageHandler に関連した出力

PageHandler を保管すると、EGL は JSP ファイルをプロジェクト・フォルダー WebContent¥WEB-INF に配置します。 ただし、次の場合に限られます。
  • JSP ファイル名を指定する PageHandler の view プロパティーに値を割り当ててある
  • フォルダー WebContent¥WEB-INF に、指定した名前の JSP ファイルが入っていない

PageHandler の生成時に、EGL が JSP ファイルを上書きすることは決してありません。

ワークベンチ設定で、保管時の自動ビルドを設定している場合、PageHandler を保管するたびに PageHandler の生成が行われます。いずれの場合も、PageHandler を生成すると、出力は以下のオブジェクトから構成されます。
  • ページ Bean は、データを含み、Web ページの初期化、データ妥当性検査、およびイベント処理サービスを行う Java™ クラスです。ランタイム・イベントに言及するドキュメンテーションでは、PageHandler という用語は、ページ Bean を指すために使用されることがあります。
  • <managed-bean> エレメントは、 プロジェクト内の JSF 構成ファイルに配置され、実行時にページ Bean を識別します。
  • JSF アプリケーション構成ファイル中に、<navigation-rule> エレメントが作成され、JSF 出力 (PageHandler の名前) を呼び出し先の JSP ファイルに関連付けます。
  • PageHandler を保管した時点と同じ状態での JSP ファイル。

パーツ・ハンドラーによって使用されるすべてのデータ・テーブルおよびレコードも生成されます。

検証

JSP ベースの JSF タグがデータ変換、検証、またはイベント処理を行う場合、 JSF ランタイムは、ユーザーが Web ページを処理依頼するとすぐに必要な処理を行います。 エラーが検出された場合、JSF ランタイムは、PageHandler に制御を渡さずに、ページを再表示します。 ただし、PageHandler が制御を受け取ると、PageHandler は一連の EGL ベースの検証を行うことがあります。

EGL ベースの検証は、PageHandler を宣言するときに以下の詳細を指定すると行われます。
  • 個々の入力フィールドのエレメントの編集 (最小入力長さなど)。
  • 個々のフィールドの入力ベースの編集 (文字、数値)。
  • DataTable パーツ』で説明しているような、個々の入力フィールドの DataTable の編集 (範囲、一致の有効、および一致の無効)。
  • 個々の入力フィールドのためのバリデーター関数。
  • PageHandler 全体のためのバリデーター関数。
PageHandler は、ユーザーが値を変更したフィールドについてのみ、以下の順序で編集を監視します。
  1. すべての基本的な入力ベースの編集 (一部が失敗した場合でも)
  2. 前の編集が成功した場合、すべてのテーブルの編集 (一部が失敗した場合でも)
  3. 前の編集が成功した場合、すべてのフィールド編集機能 (一部が失敗した場合でも)
  4. 前の編集がすべて成功した場合、PageHandler 編集機能

PageHandler フィールド・プロパティー validationOrder は、 個々の入力フィールドが編集される順序、 およびフィールド・バリデーター関数が呼び出される順序の両方を定義します。

validationOrder プロパティーが指定されない場合、デフォルトは、 PageHandler に定義されたフィールドの順序 (上から下) になります。 PageHandler のフィールドの一部で (すべてではなく) validationOrder が指定されている場合、 最初に validationOrder プロパティーを使用する全フィールドの検証が指定順で行われます。 続いて、validationOrder プロパティーを使用しないフィールドの検証が、 PageHandler のフィールド順 (上から下) で行われます。

EGL ランタイムがバリデーター関数の外部でエラーを検索した場合は、 JSF ランタイム・コードが、埋め込まれたエラー・メッセージのある同じ Web ページを再表示します。 バリデーター関数がエラーを検索した場合、 この関数は制御を別の Web ページに転送することもできますが、 デフォルトの振る舞いは、同じ Web ページを再表示することです。

ランタイム・シナリオ

このセクションでは、 ユーザーと Web アプリケーション・サーバーとの実行時の対話についての技術的概要を示します。

ユーザーが、PageHandler によってサポートされる JSP を呼び出すと、以下のステップが実行されます。
  1. Web アプリケーション・サーバーは、以下のように環境を初期化します。
    1. セッション・オブジェクトを構成して、 ユーザーとの複数の対話全体にわたって必要なデータを保存します。
      • PageHandler のスコープ・プロパティーがセッション に設定されている場合は、 ページ Bean がセッション・オブジェクトに割り当てられます。
      • いずれの場合も、EGL はシステム関数 J2EELib.setSessionAttrJ2EELib.getSessionAttr、および J2EELib.clearSessionAttr を提供します。 これらの関数により、ユーザーは、セッション・オブジェクトへのデータの配置、 セッション・オブジェクトからのデータの検索または消去を行うことができます。
    2. ユーザーとの、ユーザーの現在の対話のデータを保存するように、要求オブジェクトを構成します。
      • PageHandler のスコープ・プロパティーが要求 に設定されている場合は、 ページ Bean が要求オブジェクトに割り当てられます。
      • いずれの場合も、EGL はシステム関数 J2EELib.setRequestAttrJ2EELib.RequestAttr、および J2EELib.clearRequestAttr を提供します。 これらの関数により、ユーザーは、要求オブジェクトへのデータの配置、 要求オブジェクトからのデータの検索または消去を行うことができます。
    3. JSF ランタイム・コードを初期化します。
    注: PageHandler のスコープ・プロパティーがセッション に設定されている場合でも、 その PageHandler 内のデータは、必ずしも、ユーザー・セッション全体を通して使用可能であるとは限りません。 例えば、PageHandler A が制御権を PageHandler B に移動した場合、 ユーザーが以下のようなアクションを取っていない限り、 PageHandler A にあるデータは、使用できなくなります。
    • 新規の PageHandler に渡される引数の中にデータを組み込んだか、または
    • セッションまたは要求オブジェクト内にデータを組み込んだか、または
    • リレーショナル・データベースまたはその他のデータ・ストアにデータを組み込んだ。
  2. JSF ランタイム・コードの動作は、以下のとおりです。
    1. JSP ファイルを呼び出す。 これにより、JSF 構成テーブルが特定のページ Bean に関連付けられます。
    2. ページ Bean を作成する。
    3. PageHandler のスコープ・プロパティーの値に応じて、 ページ Bean をセッションまたは要求オブジェクトに割り当てる。
    4. ページ Bean の onPageLoad 関数 (存在する場合) に制御権を与え、 ユーザー指定の引数をすべて提供する。
  3. JSP は、Web ページへの組み込みのため、ページ Bean から直接にデータにアクセスし、続いて、Web ページをユーザーに表示し、セッション・オブジェクトを所定の場所に残し、 (より一時的に) 要求オブジェクトを所定の場所に残します。
  4. ユーザーは、(例えば) HTML <FORM> タグに関連付けられているスクリーン内のフィールドにデータを指定してから、 SUBMIT ボタンをクリックして PageHandler 関数を呼び出すこともできます。
  5. JSF ランタイムの動作は、以下のとおりです。
    1. 要求オブジェクトを破棄する。 そして PageHandler のスコープ・プロパティーが要求 に設定されている場合は、 ページ Bean を除去する。
    2. 新規の要求オブジェクトを構成する。
    3. PageHandler のスコープが要求 に設定されている場合にのみ、 次のステップを行う。
      1. ページ Bean を作成する。
      2. ページ Bean を要求オブジェクトに割り当てる。
      3. ページ Bean の onPageLoad 関数 (存在する場合) に制御権を与え、 ユーザー指定の引数をすべて提供する。
    4. 以下のように JSF 妥当性検査を処理する (ただし、EGL PageHandler 処理のコンテキストでは、JSF 妥当性検査のサブセットのみが可能です)。
      • ユーザー・データをページ Bean に入れる (JSF の観点から入力データが有効であった場合)、または
      • JSF メッセージのある Web ページを再表示する (入力データが無効であった場合)。 このシナリオの中の以降のステップは、入力データが有効であった場合に実行されます。
    5. EGL 妥当性検査 (先に説明した) のため、 処理依頼した書式の受信データをページ Bean に入れます。 エラーが発生しない場合、JSF ランタイム・コードは、 ユーザーが要求した PageHandler 関数を以下のように呼び出します。
      • この関数が forward 文を発行しないで終了した場合、 JSF ランタイム・コードは、OnPageLoad 関数を再呼び出ししないで、同じ Web ページを再表示します。
      • この関数が、同じ Web ページを参照する forward 文を発行して終了した場合、 状態は前のケースと同じになり、OnPageLoad 関数は再呼び出しされません
      • この関数が別のページを参照する forward 文を発行して終了した場合、 ページ Bean 内のデータは失われます。 しかし、引数を渡して、セッションまたは要求オブジェクトのいずれかに値を保存することもできます。
フィードバック
(C) Copyright IBM Corporation 2000, 2005. All Rights Reserved.