説明
リクエストで存在しない CFML ページが指定されたときに実行します。
シンタックス
<cffunction name="onMissingTemplate" returnType="boolean"> |
関連項目
『ColdFusion アプリケーションの開発』の Application.cfc でのアプリケーションおよびイベントハンドラの定義のメソッドの概要、Application.cfc でのエラー処理
パラメーター
ColdFusion は、次のパラメーターをこのメソッドに渡します。
パラメーター |
説明 |
---|---|
targetPage |
Web ルートからリクエストされた CFML ページまでのパスです。 |
戻り値
boolean 値です。true、または値を返さない場合は、イベントが処理されたことを示します。false の場合は、イベントが処理されなかったことを示します。
使用方法
ColdFusion は、ファイルが見つからない場合、つまり、存在しない CFML ページが URL に指定されている場合に、このメソッドを呼び出します。onMissingTemplate 関数は、イベントが処理されたことを示す場合は true、イベントが処理されなかったことを示す場合は false を返す必要があります。この関数が値を返さない場合は、true と見なされます。この関数が false を返した場合、ColdFusion は標準のエラーハンドラを呼び出します。onMissingTemplate 関数内でエラーが発生した場合、エラーハンドラは呼び出されません。したがって、見つからないテンプレートのハンドラで try/catch ブロックを使用する必要があります。catch ブロックでエラーを処理できない場合は、この関数の戻り値を false に設定して、標準のエラーハンドラでエラーをレポートできるようにする必要があります。onMissingTemplate 関数が呼び出されると、該当する場合は onApplicationStart イベントハンドラと onSessionStart イベントハンドラが最初に呼び出されますが、onRequestStart ハンドラ、onRequest ハンドラおよび onRequestEnd ハンドラは呼び出されず、onMissingTemplate ハンドラが戻るとリクエストの処理は終了します。onMissingTemplate 関数では、Application スコープ、Session スコープ、Client スコープなど、すべての標準スコープを使用できます (有効化されている場合)。onMissingTemplate 関数にページのコンテンツを含めるには、cfinclude タグを使用します。他のメソッド(cflocation、GetPageContext().forward()、GetPageContext().include() などのタグや関数)を使用して他のページのコンテンツを含めたり、リダイレクトしないでください。次のすべての条件を満たす場合は、This.welcomeFileList 変数を使用して、この関数が実行されないようにします。
- Web サーバーで、CFML ファイル (index.cfm など) が少なくとも 1 つ含まれたウェルカムファイルリストを使用し、ユーザーがディレクトリ名で終わる URL を入力した場合に CFML ファイルへのアクセスを試みる。
- Web サーバーは、CFML ページが存在するかどうかを最初に判断せずに、ウェルカムファイルリストの CFML ページに対するリクエストを ColdFusion に送信する。
- リストのファイルが存在しない Web ディレクトリのユーザーによる参照を許可する必要がある。
詳細については、Application 変数の welcomeFileList を参照してください。
例
<!--- The web.xml welcome-file-list includes index.cfm. |
OnMissingTemplate を ColdFusion Admin で設定し、ユーザーが存在しないページにアクセスしようとすると、OnMissingTemplate が呼び出され、Tomcat がそのコンテンツを返します。しかし、IIS の場合は、そのコンテンツを表示する代わりに、独自のエラーページまたは 404 ページを表示します。この問題を修正するために、isapi_redirect.properties に iis_skip_custom_errors_enable という新しいプロパティが導入されています。true に設定した場合、IIS のカスタムエラーがスキップされます。デフォルト値は false です。