ページのロード時のコマンドの実行

ページのロード時に自動的に実行される関数を、JSF ハンドラーに組み込むことができます。

JSF ハンドラーのプロパティー onPreRenderFunctiononPostRenderFunction、および onConstructionFunction を使用すると、ページのライフ・サイクルのさまざまなポイントで実行される関数を指定することができます。

これらの関数の実行時期は、ページの scope プロパティーの値によって決まります。 EGL 制御の Web ページにユーザーが初めてアクセスすると、EGL は JSF ハンドラーをロードします。このハンドラーは、実行時にページ Bean によって表示されます。ページのスコープが session (デフォルト) に設定されていると、その Bean は、ユーザーがそのページから離れてブラウズした場合でも、そのユーザーのセッション中はアクティブのままになります。ユーザーがそのページに戻っても、Bean は引き続き有効な状態になっています。 ページのスコープを request に設定した場合、ユーザーがそのページから離れてブラウズすると、Bean はアクティブではなくなります。このケースでは、Bean に保存されたデータはすべて失われてしまうため、ユーザーがそのページに戻ったときに、その Bean を再度ロードする必要があります。

これらのプロパティーを複数指定する場合は、以下の点に注意してください。
次の JSF ハンドラーのサンプルで、これらの関数を 2 つ使う方法を紹介します。
  1. EGL Web プロジェクト内に、loadTest.jsp という名前の新規 Web ページを作成します。
  2. エディターで開いているページを右クリックしてから、「ページ・コードの編集」をクリックして、新規ページの JSF ハンドラーを開きます。
  3. このサンプルに一致するように、JSF ハンドラーのコードを変更します。
    package jsfhandlers;
    
    handler loadTest type JSFHandler
        {onConstructionFunction = onConstruction, 
         onPreRenderFunction = onPreRender,
         scope = session,
         view = "loadTest.jsp"} 
          
          numberOfLoads int;
          messageString string;
    
        function onConstruction()
            numberOfLoads = 0;
        end
        
        function onPreRender(incomingNumber int)
            numberOfLoads = incomingNumber + 1;
            messageString = "You have viewed this page " 
                + numberOfLoads + " times.";
        end
        
        function forwardBack()
            forward numberOfLoads to "loadTest";
        end
        
    end
  4. JSF ハンドラーを保存して、閉じます。
  5. loadTest.jsp ページで、「パレット」ビューの「拡張 Faces コンポーネント」ドロワーから 「出力」フィールドを追加する。
  6. その出力フィールドの横に、「パレット」ビューの「拡張 Faces コンポーネント」ドロワーから 「ボタン - コマンド」を追加する。
  7. 「ページ・データ」ビューから出力フィールドに、messageString を直接ドラッグする。 これで、JSF ハンドラーの変数が、ページの出力フィールドにバインドされます。
  8. 「ページ・データ」ビューからコマンド・ボタンに、forwardBack() を直接ドラッグする。 これで、このボタンが、JSF ハンドラーの関数にバインドされました。
  9. ページを保存して、プロジェクトを生成します。
  10. そのページをサーバーで実行します。
このページを初めて実行したときに、「このページを 1 回表示しました (You have viewed this page 1 times)」と表示されます。 このケースでは、onConstructionFunction プロパティーで指定されている関数が最初に実行され、numberOfLoads 変数がゼロに設定されます。次に、onPreRenderFunction プロパティーで指定されている関数が実行されると、この変数は 1 に設定され、メッセージ・ストリング変数は「このページを 1 回表示しました (You have viewed this page 1 times)」に設定されます。これ以降、このページを再ロードするたびに、この変数は 1 ずつ増加します。つまり、onPreRenderFunction 関数は毎回実行されますが、onConstructionFunction 関数は毎回実行されないということです。

scoperequest に設定して、このサンプルを実行すると、この変数は 1 を超えることはありません。ページが最新表示されるたびに、onConstructionFunction 関数によって変数がゼロに設定されるからです。 必ず JSF ハンドラーへの変更点を保存し、プロジェクトを生成し、サーバーに再公開してください。

これらの関数には、以下の制約があります。

詳しくは、これらのプロパティー専用の各トピックを参照してください。


フィードバック