Cosminexus V9 アプリケーションサーバ 機能解説 基本・開発編(Webコンテナ)

[目次][用語][索引][前へ][次へ]

6.3.1 カスタムタグのスクリプト変数の定義に関する注意事項

ここでは,JSPのカスタムタグで,スクリプト変数を定義する場合の注意事項,JSPトランスレーション下位互換機能の使用有無によるJSPのコンパイルの動作の差異,およびJSPトランスレーション下位互換機能の定義について説明します。

<この項の構成>
(1) 注意事項
(2) JSPトランスレーション下位互換機能の使用有無によるJSPのコンパイルの動作の差異
(3) JSPトランスレーション下位互換機能の定義

(1) 注意事項

●スコープ指定時の注意

複数のカスタムタグで,スクリプト変数名とスクリプト変数のスコープが重複した場合,アプリケーションサーバのバージョンによって,JSPのコンパイル結果が異なります。スクリプト変数のスコープは,次のどちらかで指定します。

JSPのカスタムタグで同じ名称のスクリプト変数を指定した場合に,アプリケーションサーバのバージョンごとの動作の違いを次に示します。

スコープが「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コンパイルの結果がエラーとなることがあります。

(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回目のカスタムタグに対応するスクリプト変数の変数宣言を出力するかどうかを指定します。

簡易構築定義ファイル,および指定するパラメタの詳細は,マニュアル「アプリケーションサーバ リファレンス 定義編(サーバ定義)」を参照してください。