PageHandler パーツ
EGL
ページ・ハンドラー は、
ページ・コード の 1 つの例です。これはユーザーの Web ページとのランタイム相互作用を制御し、以下のいずれのタスクでも実行できます。
- JSP ファイルへ実行依頼するために、データ値を割り当てる。
これらの値は、最終的に Web ページに表示されます。
- ユーザーまたは呼び出し先プログラムから戻されたデータを変更する。
- 制御を別の JSP ファイルへ転送する。
最も簡単な方法としては、Page Designer で JSP ファイルをカスタマイズしてページ・ハンドラーを作成する方法です。詳しくは、『EGL の Page Designer サポート 』を参照してください。
ページ・ハンドラーには、変数と以下のようなロジックが組み込まれます。
- JSP が Web ページを初めてレンダリングしたときに呼び出される OnPageLoad 関数
- イベント・ハンドラーのセット (それぞれ、特にユーザーによるボタンやハイパーテキスト・リンクのクリックなどのユーザー・アクションに応答して呼び出される)
- オプションとして、Web ページ・入力フィールドの検証に使用される検証機能
- 他のページ・ハンドラー機能によってのみ呼び出すことのできる専用の機能
ページ・ハンドラーの変数は、2 とおりの方法でアクセスされます。
- ランタイム環境がデータに自動的にアクセスします。JSP のフィールドが、ページ・ハンドラーの項目に
バインド されている場合、結果は次のようになります。
- OnPageLoad 関数が実行された後、Web ページが表示される前に、データがバインドされる
JSP フィールドに各ページ・ハンドラー項目の値が書き込まれます。
- バインドされた JSP フィールドのある書式をユーザーが処理依頼すると、処理依頼された書式の各フィールドの値が、
関連するページ・ハンドラー項目にコピーされます。
この場合のみ、コントロールがイベント・ハンドラーに渡されます。(ただし、この説明には検証ステップは含まれません。これについては、このトピックで後述します。)
- イベント・ハンドラーおよび OnPageLoad 関数は、データ・ストア
(SQL データベースなど) や呼び出し先プログラムとの対話の他、データとの対話も行えます。
pageHandler パーツはシンプルにする必要があります。
パーツには、範囲検査のような単純なデータ妥当性検査が組み込まれる場合がありますが、他のプログラムを呼び出して、複合ビジネス・ロジックを実行することをお勧めします。例えば、データベース・アクセスは、呼び出し先プログラムに対して予約される必要があります。
ページ・ハンドラーに関連した出力
ページ・ハンドラーを保管すると、EGL は JSP ファイルをプロジェクト・フォルダー WebContent¥WEB-INF に配置します。ただし、次の場合に限られます。
- JSP ファイル名を指定するページ・ハンドラーの view プロパティーに値を割り当ててある
- フォルダー WebContent¥WEB-INF に、指定した名前の JSP ファイルが入っていない
EGL は JSP ファイルを上書きしません。
ワークベンチ設定で、保管時の自動ビルドを設定している場合、ページ・ハンドラーを保管するたびにページ・ハンドラーの生成が行われます。いずれの場合も、ページ・ハンドラーを生成すると、以下のオブジェクトで出力が構成されます。
- ページ Bean は、データを含み、Web
ページの初期化、データ妥当性検査、およびイベント処理サービスを行う Java™ クラスです。
- <managed-bean> エレメントは、プロジェクト内の JSF 構成ファイルに配置され、実行時にページ Bean を識別します。
- JSF アプリケーション構成ファイル中、<navigation-rule> エレメントが作成され、
JSF 出力 (ページ・ハンドラーの名前) を呼び出し先の JSP ファイルに関連付けます。
- ページ・ハンドラーを保管した時点と同じ状態での JSP ファイル。
パーツ・ハンドラーによって使用されるすべてのデータ・テーブルおよびレコードも生成されます。
検証
JSP ベースの JSF タグがデータ変換、検証、またはイベント処理を行う場合、JSF
ランタイムは、ユーザーが Web ページを処理依頼するとすぐに必要な処理を行います。エラーが検出された場合、JSF ランタイムは、ランタイム・ページ・ハンドラーに制御を渡さずに、ページを再表示します。ただし、ページ・ハンドラーが制御を受け取ると、ページ・ハンドラーは一連の
EGL ベースの検証を行います。
EGL ベースの検証は、ページ・ハンドラーを宣言した場合に以下の詳細を指定すると行われます。
- 個々の入力フィールドのエレメントの編集 (最小入力長さなど)。
- 個々のフィールドの入力ベースの編集 (文字、数値)。
- 『DataTable パーツ』で説明しているような、個々の入力フィールドの DataTable の編集 (範囲、一致の有効、および一致の無効)。
- 個々の入力フィールドの編集機能。
- ページ・ハンドラーの編集機能全体。
ページ・ハンドラーは、ユーザーが値を変更した項目についてのみ、以下の順序で編集を監視します。
- すべての基本的な入力ベースの編集 (一部が失敗した場合でも)
- 前の編集が成功した場合、すべてのテーブルの編集 (一部が失敗した場合でも)
- 前の編集が成功した場合、すべてのフィールド編集機能 (一部が失敗した場合でも)
- 前の編集がすべて成功した場合、pageHandler 編集機能
ページ項目プロパティー validationOrder は、個々の入力が編集され、フィールド・バリデーター関数が呼び出される順序を定義します。
validationOrder プロパティーが指定されない場合、デフォルトは、ページ・ハンドラーに定義された項目の順序
(上から下) になります。ページ・ハンドラーの項目の一部で (すべてではなく) validationOrder が指定されている場合、validationOrder
プロパティーによる全項目の検証が指定順で最初に行われます。続いて、validationOrder プロパティーを使用しない項目の検証が、ページ・ハンドラーの項目順
(上から下) で行われます。
ランタイム・シナリオ
このセクションでは、ユーザーと
Web アプリケーション・サーバーとの実行時の対話についての技術的概要を示します。
ユーザーがページ・ハンドラーによってサポートされる JSP を呼び出すと、以下のステップが実行されます。
- Web アプリケーション・サーバーは、以下のように環境を初期化します。
- セッション・オブジェクトを構成して、ユーザーがアクセスするアプリケーションで複数の対話にわたってデータを保存します。
- 要求オブジェクトを構成して、ユーザーの現在の対話のデータを保存します。
- JSP を呼び出します。
- JSP は、以下のように一連の JSF タグを処理して、Web ページを構成します。
- ページ・ハンドラーのインスタンスの作成、ユーザー指定引き数による onPageLoad 関数
(存在する場合) の呼び出し、および要求オブジェクトへのページ・ハンドラーの配置を行います。
- Web ページに組み込むために、要求オブジェクトおよびセッション・オブジェクトに保管されているデータにアクセスします。
注: pageHandler パーツには、onPageLoadFunction と呼ばれるプロパティーがあります。これは、JSP の開始時に呼び出されるページ・ハンドラー関数を識別するものです。
この関数は、渡されたユーザー提供の任意の引き数を自動的に検索します。また、他のコードを呼び出すことや、追加のデータを Web アプリケーション・サーバーの要求またはセッション・オブジェクトに配置することができます。
ただし、この関数は、他のページに制御を転送したり、ページをユーザーに最初に表示するときにエラー・メッセージを表示することはできません。
- JSP はユーザーに Web ページを処理依頼し、Web アプリケーション・サーバーは、セッション・オブジェクトおよび JSP はそのままで、応答オブジェクトを破棄します。
スクリーン内のフィールドにあるユーザー提供のデータが HTML <FORM> タグと関連付けられており、書式を処理依頼する場合は、以下のステップが実行されます。
- Web アプリケーション・サーバーは、以下のように環境を再初期化します。
- 要求オブジェクトを構成します。
- 処理依頼した書式の受信データを検証するため、ページ Bean に配置します。
- JSP を再度呼び出します。
- JSP は、以下のように一連の JSF タグを処理して、受信データをページ Bean に格納します。
- ランタイム・ページ・ハンドラーは、以下のようにデータを検証します。
- pageHandler データ宣言の指定に従って、比較的初歩的な編集 (最小入力長さなど) を行います。
- pageHandler データ宣言の指定に従って、項目に固有の任意の検証機能を呼び出します。
- 別のフィールドの内容を基にして、単一のフィールドを少なくとも部分的に検証する場合、必要に応じて pageHandler バリデーター機能を呼び出します。
(検証の詳細については、前のセクションを参照してください。)
- エラーが発生した場合、EGL ランタイムがエラーを JSF キューに入れ、JSP は Web ページを組み込みメッセージとともに再表示します。エラーが発生しなかった場合の結果は、以下のようになります。
- ページ Bean に保管されたデータは、レコード Bean に書き込まれる
- 以降の処理は、ユーザーがクリックしたボタンまたはハイパーリンクに関連付けられている JSF タグで識別されるイベント・ハンドラーによって決定される
イベント・ハンドラーは、ランタイムの JSF ベースの構成ファイル内のマッピングを識別する
JSF ラベルに処理を送ることができます。次に、呼び出すオブジェクトが JSP (通常は、EGL ページ・ハンドラーに関連付けられている JSP)、またはサーブレットのどれであるかを、このマッピングが識別します。