Cosminexus V9 アプリケーションサーバ 機能解説 基本・開発編(Webコンテナ)
●スコープ指定時の注意
複数のカスタムタグで,スクリプト変数名とスクリプト変数のスコープが重複した場合,アプリケーションサーバのバージョンによって,JSPのコンパイル結果が異なります。スクリプト変数のスコープは,次のどちらかで指定します。
- javax.servlet.jsp.tagext.TagExtraInfoクラスのサブクラス
- TLDファイルのvariable要素内のscope要素
JSPのカスタムタグで同じ名称のスクリプト変数を指定した場合に,アプリケーションサーバのバージョンごとの動作の違いを次に示します。
- 07-00より前のバージョンの場合
2回目以降のカスタムタグに対応するJSPから生成されたJavaコードでも,スクリプト変数の変数宣言をします。
- 07-00以降のバージョンの場合
2回目以降のカスタムタグに対応するJSPから生成されたJavaコードでは,スクリプト変数の変数宣言をしません。
スコープが「AT_BEGIN」で,属性idに指定された変数名(var)のスクリプト変数を定義するカスタムタグ<my:foo>を例に説明します。
- 定義例
<my:foo id="var" type="String">
<%=var%>
</my:foo>
<my:foo id="var" type="String">
<%=var%>
</my:foo>
|
- 07-00より前のバージョンの場合
2回目のカスタムタグに対応するJSPから生成されたJavaコードでも,スクリプト変数varで変数宣言をします。この場合,各カスタムタグでのスコープ「AT_BEGIN」の範囲は次のようになります。
このため,JSPから生成されたJavaソースのコンパイル時にコンパイルエラーとなります。
- 07-00以降のバージョンの場合
2回目のカスタムタグに対応するJSPから生成されたJavaコードでは,スクリプト変数varで変数宣言をしません。この場合,各カスタムタグでのスコープ「AT_BEGIN」の範囲は次のようになります。
このため,同一スコープ内で同一の名称のスクリプト変数を定義しても,JSPから生成されたJavaソースのコンパイルは正常に実行されます。
●スクリプトレット記述時の注意
JSPからJavaソースを生成する際,スクリプトレットで記述されたJavaコードは解析しません。このため,カスタムタグの前後,またはボディのスクリプトレットで,スクリプト変数のスコープが変更される処理を定義していると,アプリケーションサーバのバージョンによっては,JSPコンパイルの結果がエラーとなることがあります。
- スコープが「AT_BEGIN」の場合にコンパイルエラーとなる例
この例では,カスタムタグ<my:foo>で,スコープに「AT_BEGIN」,属性idに指定された変数名(var)のスクリプト変数を定義しています。
<% if(flag) { %>
<my:foo id="var" type="String">
<%=var%>
</my:foo>
<% } else { %>
<my:foo id="var" type="String">
<%=var%>
</my:foo>
<% } %>
|
この定義例での,アプリケーションサーバのバージョンごとの動作を次に示します。
- 07-00より前のバージョンの場合
2回目のカスタムタグに対応するJSPから生成されたJavaコードでも,スクリプト変数varで変数宣言をします。このため,2回目のスクリプト変数varの参照でもエラーとなりません。JSPコンパイルは正常に実行されます。
- 07-00以降のバージョンの場合
2回目のカスタムタグでは,スクリプト変数varが宣言済みと解析します。この場合,カスタムタグに対応するJSPから生成されたJavaコードでは,変数varで変数宣言をしません。このため,2回目のスクリプト変数varの参照でエラーとなります。
(2) JSPトランスレーション下位互換機能の使用有無によるJSPのコンパイルの動作の差異
07-00以降のバージョンで,JSPトランスレーション下位互換機能を使用するときと使用しないときの,コンパイルの動作の差異を次に示します。
- 複数のカスタムタグで,スクリプト変数名とスクリプト変数のスコープが重複した場合
- JSPトランスレーション下位互換機能を使用する
2回目以降のカスタムタグに対応するJSPから生成されたJavaコードでも,スクリプト変数の変数宣言をする。
- JSPトランスレーション下位互換機能を使用しない
2回目以降のカスタムタグに対応するJSPから生成されたJavaコードでは,スクリプト変数の変数宣言をしない。
(3) JSPトランスレーション下位互換機能の定義
JSPトランスレーション下位互換機能の定義は,簡易構築定義ファイルの論理J2EEサーバ(j2ee-server)の<configuration>タグ内に次のパラメタを指定します。
- webserver.jsp.translation.backcompat.customAction.declareVariable
- JSPファイルから生成されたJavaコードで2回目のカスタムタグに対応するスクリプト変数の変数宣言を出力するかどうかを指定します。
簡易構築定義ファイル,および指定するパラメタの詳細は,マニュアル「アプリケーションサーバ リファレンス 定義編(サーバ定義)」を参照してください。
All Rights Reserved. Copyright (C) 2012, 2015, Hitachi, Ltd.