Cosminexus 機能解説

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

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

ここでは,JSPのカスタムタグで,スクリプト変数を定義する場合の注意事項について説明します。

●スコープ指定時の注意

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

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

スコープが「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コードは解析しません。このため,カスタムタグの前後,またはボディのスクリプトレットで,スクリプト変数のスコープが変更される処理を定義していると,Cosminexusのバージョンによっては,JSPコンパイルの結果がエラーとなることがあります。