Standard 1.0.3 リリースは Standard 1.0.2 リリースのマイナーアップデート版であり、Standard 1.0 最終リリース、すなわち JSTL 1.0 最終仕様 の実装を基に作られています。Standard 1.0.3 リリースには多くのバグフィックスおよび変更が含まれています。
Apache に取りまとめられている Standard Taglib は、現在 Sun Microsystems Inc. より提供されている JSTL 1.0 リファレンス実装 のソースリポジトリとして活用されています。
Bug Id要約 タグハンドラの再利用処理によって <c:out> に指定したデフォルト値の出力処理でバグが潜在していたことに気づきました。 doStartTag() の中でインスタンス変数を初期化するように、このバグを修正しました。 J2EE RIを利用しているユーザからのレポートを受けて、このバグを再検証し、式言語の実装をJ2EE RIのデフォルトのセキュリティ制約に対応させました。 ScriptFreeTLVのメッセージ出力に関連する軽度のバグを修正しました。 fmt:messageがプールされ再利用されたときに残るバグで、リソースバンドルが明示的に指定されない状態となっていました。/jstl-examples-taglibをサポートするために、WEB-INF/jstl-examples.tld内の <uri>定義を追加しました。setterメソッドが存在しないBean属性に<c:set>で値を設定すると、NullPointerExceptionがスローされます。 そのため、適切なエラーメッセージを含むJspExceptionを替わりにスローさせるようにしました。 <fmt:requestEncoding>のタグハンドラは、呼出しの間に"javax.servlet.jsp.jstl.fmt.request.charset"セッション属性から取得したエンコーディングの値をリセットしないようにしました。 式言語に従って評価されたBean属性のエラー発生時にスローされた例外オブジェクト自身を出力するようにしました(例外のメッセージ文字列ではありません)。 絶対URL表記でのアクセスに失敗したときにスローされる例外のメッセージを改善しました。 standard-examplesに含まれていた軽度の誤植を修正しました。
その他の変更点および追加項目:
- JSTL API Javadoc ドキュメントに含まれる軽度の誤植を修正しました。
- TLVの例題 (ScriptFree と PermittedTaglibs) を追加しました。
- standard/examples/web/xml/ForEach.jspに含まれている軽度の誤植を修正しました。
- 日本語のメッセージリソースを改善しました。
Bug Id要約 これまで fmtタグでは、タグがvalueのために使用する同じフィールド変数の中で、一つのタグからのBodyContentの中身を格納していました。 古いBodyContentが評価された後にタグ側でそれを再利用してしまうコンテナでは、このことによって問題が発生します。xml:transformタグは、入れ子構造でインポートされたXSLスタイルシートを利用できるようになりました。"$${X}"のような属性値が式を伴った文字列の替わりに単一の文字列として解析されてしまう式言語構文上のバグです。 <c:url>のvalue属性および<c:redirect>のurl属性が、JSTL仕様の定義に従って、指定必須となりました。JDBC仕様では、null値は PreparedStatement.setObject()へ渡すことが可能です。このとき、そのパラメータは、JDBC NULL属性値として設定されます。 その際、動作の不安定なPreparedStatment.setNull()の呼び出しを破棄しました。例題のタグライブラリ記述子(TLD)において、PermittedTaglibTLVおよびScriptFreeTLVのValidatorに誤植がありました。
その他の変更点および追加項目:
- <c:catch>内部でブラウザベースのロケールを使用する、数値向けの書式タグの例題をラップしました。
java.text.NumberFormatに含まれるバグ(Bugtraq bugid: 4709840)により、"de_DE"ロケールで発生してしまう数値解析の例外を適切に検知できるようにしています。- "jsp20el.build"ターゲットが変更され、JSP 2.0 ELパッケージがJSTL 1.0との潜在的な競合を避けるためにリネームされています。
- EL式が正常に評価されなかった場合に、その根本的なエラー原因を出力するようにしました。
- ELパーサに新しいレグレッションテストを追加しました。
Bug Id要約 XMLを解析した結果が String、Reader、もしくはjavax.xml.transform.Sourceであった場合において、<x:parse>の実行によってエクスポートされたオブジェクトを取得するための<x:transform>の'xslt'属性の箇所を修正しました。ELParser.jjのオプションに"UNICODE_INPUT = true"を追加しました。
その結果、非ASCII文字を含む値が渡せるようになりました。(Standard Taglibの動作に必要な)JARファイルに関する情報をすべて記載することを目的に、 GettingStarted.htmlガイドを更新しました。dataSourceに関する情報を入力する際にユーザとパスワードを渡せるよう、SQLタグの例題を更新しました。c:urlタグで、相対URL表記のページ指定に対し、コンテキストパスを補完させないようにしました。例題アプリケーションの配備記述子に <welcome-file-list>を追加しました。standard-docでも同様の箇所を変更しています。
BundleSupportで、リソースバンドルを読み込むクラスローダとしてカレントコンテキストのクラスローダを使用するように変更されました。BundleSupport内部において、Webアプリケーションのリソースを正しく検索するのに、この変更が必要でした。また SQL
DataSourceWrapperでも、リソースを読み込むために当該クラスローダを正しく使用するように変更されています。x:paramのエラーメッセージのまちがいを修正しました。
その他の変更点および追加項目:
- JAXP 1.2で動作できるように
x:parseアクションのEntityResolverを改善しました。 URIは以前の標準状態に戻り、問題なく動作するようになりました。- JSTL 1.0仕様には公式の機能仕様が記述されています。 (機能仕様の説明が載っていた)昔のドキュメントは削除されました。
- レスポンスのエンコーディングの衝突を避けるため、ハードコード版とブラウザベース版のロケール設定を同一ページ上で実行している書式タグの例題を、それぞれ別々のページに分割しました。
- リクエストパラメータを取得する式言語を使って表現するように、書式タグの例題を更新しました。
- 一般的なJDBCドライバ実装が生成する例外をより多くキャッチし、わかりやすいエラーメッセージを出力できるように、
queryおよびupdateタグを修正しました。- 仕様の定義に従い、
DateParamタグに対して空のボディを渡せるように修正されました。- nullパラメータ値を指定する際、
PreparedStatement.setNull(parameterIndex, java.sql.Types.NULL)を使うようにしました。- XPath式で解析された結果をキャッシュ化することによって、XPath処理のパフォーマンスを改善しました。
- 簡易化された
<x:transform>において相対表記のシステムIDをサポートしました。TimeZoneSupportのjavadocコメントを改善しました。- 日本語のメッセージリソースを追加しました。
- JSTL式言語でJSP 2.0機能のサポートを追加しました。 デフォルトでは、 JSTL 1.0仕様を優先させるため、新機能の利用は無効となっています。 当該機能は、特殊なインタープリタ呼出方法によってトリガーされます。