JavaServer Faces 2.0 は Java EE 標準仕様が 2004 年にリリースされて以来はじめての大幅なアップデートだ。JSF 2.0 自体は JSF 仕様の重要な見直しであり、開発者が WEB フレームワークをあつかう際にぶつかる主要な問題点の解決を目指したものである。主な変更点としては以下が挙げられる。
- JSP のかわりに Facelets ベースの VIEW 技術をもちいる。
- 標準化されたリソース管理メカニズムの提供。多くのコンポーネントはレンダリングを正常に行うために JavaScript ファイルや画像や CSS 要素などを必要とするのだが、JSF 1.x ではこれらを取り扱うための機構がなかったため、コンポーネント開発者が自分でメカニズムを作り上げる必要があった。
- 再配置可能なリソース。リソースをどこにレンダリングするか指定することができ、VIEW の中のリソースタグが置かれている場所と違う場所にレンダリングすることが可能。これにより、カスタムコンポーネントや JSF ページが適切な場所にリソース参照をレンダリングすることができ、コンポーネントが body に含まれている場合でも CSS ファイル参照を セクションに含めることができる。
- システムイベント。特定のアプリケーションに固有のものではなく、JSF アプリケーション実行中の特定の時点に生じるイベントをサポートするイベント発行/受取モデルとなっている。UI コンポーネントと(シングルトンな)アプリケーションオブジェクトのいずれもがシステムイベントを受取可能である。
- あたらしいスコープ。view スコープと component スコープが追加された。conversation スコープの利用には Web Beans API (参考記事・英語)をつかうことが期待される。
- 「project stage」パラメータの標準化。プロジェクトステージは JSF の振る舞いをコントロールする手段を提供するもので、コンテキストパラメータもしくは JNDI をつかって設定される事前定義の列挙型をベースにしている。たとえば、開発中には付加的なデバッグ情報をブラウザに表示し運用ではその表示を抑制する、といったことができる。定義されているステージは production、development、unit test、system test、extension で、デフォルト値は production である。実行時には、Application.getProjectStage() メソッドを呼び出すことで、設定したステージをあらわすオブジェクトを取得することができる。
- アノテーションとデフォルト値を活用することで XML への依存度を削減
- JSF 1.2 で導入された AJAX サポートの拡張
これらの大きな変更点は、JSF 1.x を使って開発する際の主要な問題点のひとつである、カスタムコンポーネント構築の複雑さを解決してくれる。JSF 1.x ではコンポーネントの作者はマークアップページで利用できるカスタムコンポーネントを作るのに、いくつもの手順を踏む必要があった。もっとも単純なケースでも、コンポーネントの作者は、JSP か Facelets のタグハンドラを実装し、コンポーネント用のレンダラを提供し、その両方に対して faces-config.xml に適当なエントリを記述しなければならなかった。Facelets は JSF での利用を前提に作られた JSP の代替技術で、JSF 開発者に広くもちいられている。Facelets は合成コンポーネントによるテンプレートの作成をサポートすることで事態を改善してくれる。このアプローチには、テンプレート用マークアップとコンポーネントを含んだ XHTML ページを作成し、それを別のページでコンポーネントとして使うことが必要とされる。有効な Facelets XHTML ページはいずれもコンポーネントとして利用することができる。そして JSF 1.x で Facelets を使うのとはちがって、JSF 2 の合成コンポーネントは本物の UIComponent と同じように機能するので、バリデータやコンバータやリスナ(アクションのリスナと値変更のリスナ両方)も使うことができる。合成コンポーネントはリソースとして扱われるので、新しい標準のリソースメカニズムを活かすことができる。たとえば、MenuPanel.html という Facelets のマークアップファイルが ezcomp というリソースライブラリ内にあるとすると、ページの作成者は xml のネームスペースを xmlns:ez="http://java.sun.com/jsf/composite/ezcomp" と宣言し、ページに
JSF 2.0 エキスパートグループは JSF 2.0 の Draft 2 をすでにリリースした。ドラフトは JCP のサイトからダウンロード可能だ(リンク)。ドラフトの実装もこちらからダウンロードできる。仕様は、年末には最終ドラフトとなる見通しである(リンク)。