onConstructionFunction
JSF ハンドラーのプロパティー onConstructionFunction は、ページが最初に構成されるときに実行される、JSF ハンドラー内の関数を指定します。
(このプロパティーは、以前は onPageLoadFunction でした。)
より正確には、ページ Bean (Web サーバー内の JSF ハンドラーを表す) がインスタンス化 (作成) されたときにこの関数が実行されます。
- セッション・スコープを備えたページでは、最初にユーザーがページにアクセスしたときにのみ、ページ Bean が作成されます。
- 要求スコープを備えたページでは、ユーザーがページにアクセスするたびにページ Bean が再作成されます。
- JSF ハンドラーの cancelOnPageTransition プロパティーが YES に設定されている場合、ユーザーが別のページに移動すると、scope プロパティーが session に設定されている場合であっても、ページ Bean はセッションから削除されます。そのため、次にユーザーがページにアクセスする際、再びページ Bean が作成されます。
この特定の関数は、別の JSF ハンドラーまたはプログラムがこの JSF ハンドラーにコントロールを転送すると実行されます。 この関数は、JSF ハンドラーが制御をそれ自体に転送した場合、または JSF ハンドラー内の関数が forward 文を発行せずに終了した場合は、再度実行されません。
以下の関連プロパティーと比較してください。
- onPreRenderFunction。これは、メモリー内のページがレンダリングされる前に実行される関数を指定します。
- onPostRenderFunction。これは、メモリー内のページがレンダリングされた後 (ただし、ページが画面に出力される前) に実行される関数を指定します。
これらのプロパティーが参照する関数のいずれかにパラメーターを指定する場合、すべての関数に対して同じパラメーターを指定する必要があります。
セッション・スコープを使用し、cancelOnPageTransition を NO に設定している場合、JSF はハンドラーをセッションに配置します。この状態は、タイムアウトになるまで、あるいはセッションが終了するまで続きます。
ハンドラーには、未使用フィールドのデータ、またはその他の不要な情報を含めることができます。
以下を実行することにより、メモリーを保存できる場合があります。
- 要求スコープを使用します。
- 要求の終了後も存続させる必要のあるすべてのデータを明示的に保存します。
- onConstructionFunction または onPreRenderFunction のいずれかで指定された関数のデータを復元します。
j2eeLib clearSessionAttr() と clearEGLSessionAttr() の関数を用いて、セッション・スコープから明示的にページを削除できます (clearSessionAttr() および clearEGLSessionAttrs() 参照)。
制限
- on construction 関数で時間のかかるデータ検索を実行しないでください。特定の状況で、JSF はアプリケーション内の任意のハンドラーの作成時に同期化を行うからです。このケースでは、多数のユーザーが同じページを要求していたとしても、サーバーは一度に 1 つのページ Bean のコピーしか作成できないという制限があります。 on construction 関数でリモート呼び出しを行わないようにしてください。リモート・マシンに接続するのにかなりの時間を要する可能性があるからです。prerender 関数にはこの制限はありません。
- ページ Bean は、ページをレンダリングするサーバーが JSF ハンドラー内のフィールドまたは関数への参照を行うときにのみ作成されます。 ページに、EGL 変数にバインドされたフィールドがなく、また EGL 関数にバインドされたボタンがない場合、JSF がページ Bean を作成することはなく、また on construction 関数が実行されることはありません。 ページに、EGL 変数にバインドされたフィールドはないが、EGL 関数にバインドされたボタンがある場合、ユーザーが最初にボタンを押したときにのみ、サーバーはページ Bean を作成し on construction 関数を実行します。
- コンポーネント・ツリーのアクセスで説明しているとおり、on construction 関数は JSF コンポーネント・ツリーにアクセスできません。
- on construction 関数では、sysLib.setError() を使用してコンポーネントに対するエラー・メッセージを設定することができません。 ただし、この関数は sysLib.setErrorForComponentID() を使用することができます。
- on construction 関数では、forward to URL ステートメントを使用できますが、forward to label ステートメントは使用できません。
例
次の例は、JSF ハンドラー・パーツのコンテキストでのプロパティーを示しています。
Handler handler01 type JSFHandler
{ onConstructionFunction="resetVars" }
...
Function resetVars()
...
end
end
互換性
| データ項目 | JSF ハンドラー | VGUI レコード | コンソール UI | テキスト書式 Java™ | テキスト書式 COBOL | 印刷書式 Java | 印刷書式 COBOL |
|---|---|---|---|---|---|---|---|
| なし | あり | なし | なし | なし | なし | なし | なし |