JSR 314: JavaServer Faces 2.0

JSR 314: JavaServer Faces 2.0(JSF 2.0)はJava EE 6に含まれる予定となっている次期バージョンのJSF仕様である。JSFはもともとJava EEアプリケーションのビューを開発するための環境を改善するために考案されたものであり、これを利用すれば豊富なUIコンポーネントをタグベースで利用することができる。

しかし現状では、当初の狙いほどJSFが普及しているとは言えない。従来のJSFの問題点としては、カスタムコンポーネントの開発が容易でなかったり、肝心のEJBとの相性が良くなかったりといったことが挙げられる。またAjaxををベースとしたリッチなUIへの対応が遅れている点も、他のフレームワークに押される大きな要因だ。

JSF 2.0で目指すのはこれらの問題の解決である。JSF 2.0仕様の基本的なコンセプトは本連載の第14回で取り上げている。今回は、先日公開されたEarly Draftを元に、上記課題を解決するための具体的な方向性を紹介したい。

カスタムコンポーネントの開発を容易に

JSF 2.0における重要なコンセプトのひとつがEoD(Ease of Development)のさらなる促進である。そのためにはカスタムコンポーネント開発を容易に行えるようにすることが不可欠だとされている。

そこで2.0では、ページデザインのための重要な機能としてFaceletsがサポートされる。FaceletsはJSFアプリケーションを構築するための強力なテンプレートシステムであり、これを利用することでHTML風のテンプレートによってJSFベースのビューが定義できるようになる。

残念ながらEarly DraftにはJSF 2.0におけるFaceletsサポートの詳細はまだ記載されていないが、まずはリクエスト処理とFaceletsのライフサイクルの統合を目指すという。同時に、テンプレートベースのレンダラやイベントを導入していく予定とのことである。

その他、コンフィギュレーションの容易性を向上させるために、Ruby on RailsにおけるRAILS_ENV環境変数にならったプロパティが導入される。これはjavax.faces.application.ProjectStageで定義される各プロパティに対してそれぞれデフォルトの設定値を用意するというもの。プロパティには"Development"や"Production"、"SystemTest"、"UnitTest"などが提案されており、これによってプロジェクトのステージごとのデフォルト設定を自動的に読み込むことが可能となる。

Ajaxのサポート

充実したビューの構築環境を提供するフレームワークとして、Ajaxのサポートは絶対に欠かせない要件でもある。JSF 2.0では、JSFのコンポーネントにAjaxを用いた動的なコンテンツを統合するためのリソースやJavaScript APIが提供される。

Ajaxリソースをロードする方法としては下記の3つのアプローチがあるという。

  • アノテーションを用いたアプローチ
  • リソースAPIによるアプローチ
  • PDL(Page Definition Language)によるアプローチ

たとえばアノテーションを用いる場合、カスタムコンポーネントやレンダラにおいて@ResourceDependencyを使ってリスト1のように必要なAjaxリソースやライブラリを指定することができる。

リスト1

@ResourceDependency (name="ajax.js", 
                     library="javax.faces", 
                     target="head")
public class MyComponent extends UIOutput {
    ......
}

なお、この例で指定しているajax.jsはJSF 2.0で提供される予定のJavaScript APIを含むAjaxリソースである。その他、JavaScript APIではUIコンポーネントツリーの部分的な探索や、ページの一部分のみのアップデート、新しいリソース配信メカニズムなどがサポートされる予定。

JSFにJavaScript APIを統合する場合に問題となるのが名前空間だ。そのためJSF 2.0ではOpen Ajax Allianceに登録した"javax"をトップレベルの名前空間として使用し、"faces"をそのプロパティに、"Ajax"をfacesのプロパティに使用するとのこと。

その他、Ajaxを利用した動的なコンポーネントを用意することも提案されている。ただし、これはJSF 2.0の仕様に含むのではなく、コンポーネントライブラリの一部として提供される可能性が高い。

他のAPIとの関係

Java EE 6に含まれる予定のAPIにはJSFと関係の深いものがいくつかある。ServletやJSPはもちろんだが、JSR 299: Web Beansは特に注目すべきだろう。これはEJBとJSFのシームレスな統合を実現する新しいAPIであり、JBoss Seamをベースとして仕様策定が進められている。Web Beansが登場すれば、JSFで問題視されていたEJBのコンポーネントモデルとのギャップが解決される。またJSF 2.0ではPortlet 2.0などとの互換性も重視していくという。