JavaServer Faces
JavaServer Faces (JSF) は Java ベースの Webアプリケーションフレームワーク であり、Java EE アプリケーションのユーザーインターフェイスの開発を簡単にする。他の伝統的なリクエスト駆動型の MVC Web フレームワークと異なり、JSF はコンポーネントベースのアプローチをとっている。 UI コンポーネントの状態は、クライアントが新しいページをリクエストした際に保存され、リクエストに対するレスポンスが返されるときに復帰される。標準では、JSF は JavaServer Pages (JSP) を表示技術として使用するが、JSF は XUL などの他の表示技術を利用することもできる。
JSF には下記の要素が含まれる:
- ユーザーインタフェース(UI)コンポーネントの表現、状態の管理、イベントのハンドル、値の変換、ページナビゲーションの定義、国際化とアクセシビリティサポートなどのための API セット
- UI コンポーネントのデフォルトのセット
- JSP ページ内の JavaServer Faces インタフェースを表現するための二つの JavaServer Pages カスタムタグライブラリ
- サーバーサイドのイベントモデル
- 状態の管理
- 管理された Bean ( 依存性の注入により設定ファイルを用いて作成されたJavaBeans)
- JSP 2.0 と JSF 1.2 のための式言語 Unified Expression Language
JSF 仕様は Java Community Process の元で、JSF 1.0 および 1.1 を定義する JSR127 として、 JSF 1.2 を定義する JSR252 として開発された。今後登場する JSF 2.0 は JSR 314 として開発中である。
JSF のバージョン
- JSF 1.0 (2004年3月11日): JSF 仕様の最初のリリース
- JSF 1.1 (2004年5月27日): バグフィックスリリース。HTML 仕様や HTML 出力部分に変更はない。
- JSF 1.2 (2006年5月11日): 最新のリリース。
- コンテンツ織込みの問題についての暫定的な解決策を提供する改善内容については、http://www.onjava.com/pub/a/onjava/2004/06/09/jsf.html に記述されている。
- 設定ファイルに DTD の代わりに XML Schema を提供
- Faces アプリケーションが、複数のフレームや複数のウインドウを持つ UI デザインができるような改善
- TCKのサポート範囲を多くするための f: タグライブラリの改善、 f:view ライフタイムイベント、その他の小さな機能改善
- API オブジェクトのデコレータのサポート
- クライアント側での状態保存のためのセキュリティの改善
- ボタンの多重押し問題の解決
- 実装を容易にするため、仕様書を標準を記述している部分とそうでない部分を分離するよう整理
- Portlet に関連するバグ修正
- 最小限の仕様変更を伴うバグ修正
- JSF 2.0 (2008年リリース予定) - 仕様書の主要な版が開発中である。Java EE 6 との同時期のリリースが計画されている。
他の Web GUI フレームワークとの比較
Struts
Struts は Apache Software Foundation が提供する人気の高いModel 2 MVC フレームワークである。Struts は page-at-a-time 型の MVC フレームワークを提供し、JSF スタイルのコンポーネントモデルは備えていない。
ページは入力をアクションに接続するディスパッチサーブレット(controller)を備えたモデルにマップされる。Struts アプリケーションはビューを表示するために JSP を使用するため、手近なタグライブラリの使い方に影響を受けやすい(Apache Beehiveも参照)。
WebObjects / Wotonomy
WebObjects は、よく知られた最も初期の Web アプリケーションフレームワークで、元々は NeXT Software によって開発された。その後 アップルコンピュータが Next を買収した際に獲得された。 WebObjects はJSF 同様のコンポーネントおよびイベントモデル、ライフサイクルを備えている。 J2EE がなくても配備することができ(もともとの構成)るが、サーブレットコンテナー内に配置することもでき、その場合にはディスパッチャオブジェクトが J2EE Web アプリケーションのエントリーポイントとして動作する。
JSF (の既定動作)とは異なり、コンポーネントは JSP ファイルには定義されず、html/xml/wml
テンプレートファイル、フィールドやアクションを Java コードにマップするファイル、.java
のクラスファイルのいずれかあるいはすべてを含む .woc
ディレクトリに定義される。テンプレートファイルは表示とレイアウト部分を提供し、他のWebObjects コンポーネントを含んでも良く、JSF が既定で使用する RenderKit への委譲のアプローチとは異なる。これは、JSF での委譲モデルと直接描画モデルの中間点にある。
WebObjects は、最も初期のオブジェクト関係マッピングのフレームワーク、Enterprise Objects Framework を備えた、レイヤー化されたアーキテクチャを含んでいる。
Wotonomy は、WebObjects フレームワークのオープンソースの再実装であり、クリーンルームで(訳注:プロプライエタリのコードを使用しないよう注意して)開発され、 LGPL でライセンスされている。Wotonomy は WebObjects のすべての部品を実装しようと試みており、完全な MVC web-GUI スタックを実装している。WebObjects のクローンであり、未完成な部分を除けば JSF との違いは WebObject と全く同様である。
Apache Tapestry
Tapestry は動的で、堅固で、スケーラブルな Web アプリケーションを Java で開発するためのオープンソースのフレームワークでである。Tapestry は標準的な Java Servlet API の上に構築され、任意のサーブレットコンテナやアプリケーションサーバーの上で動作する。JSF とは異なり、 Tapestry は JSP を表示技術として用いない。代わりに、簡単に HTML をプレビューでき、編集できる (JSF ベースの Facelet に類似した)別のテンプレートエンジンを選択している。
Microsoft ASP.NET
JSF は、Web アプリケーションの開発に、Microsoft の ASP.NET に似たコンポーネントベースのアプローチをとっている。JSF ではレンダリングとコンポーネントのインターフェイスが分離可能で出力部分をカスタマイズできるが、ASP.NET v1 では、コンポーネントの出力のコードは UI コンポーネントに結合されている。ASP.NET v2 は制御アダプターフレームワークを導入し、標準の出力エンジンをサードパーティのコードで置き換えることができる。
コンポーネントから生成し、コンポーネントとは別のファイル("code behind")に格納されるイベントを受信することでビジネスコードが UI コンポーネントに接続される。 従って、典型的な ASP.NET のページは視覚上のページレイアウト(デザイン)を記述した (HTML) ファイルと、ページのロジック(コード)を記述したファイルからなる。Microsoft の開発ツールによって、両方のファイルを一つの要素として扱うことができる。
書籍 Core JSF の著者によれば JSF は Visual Studio 2005 に似たようなRapid application development (RAD) の領域で Java が ASP.NET/Visual Studio と競争できるような手段を提供し、開発コストや開発を始める際の障壁を下げている。
JSF と Ajax
JSF はリッチインターネットアプリケーション技術である Ajax とともに言及されることが多い。Ajax はリッチなインターユーザーインタフェースの作成を可能にする技術の組み合わせである。JSF のリファレンス実装におけるユーザーインタフェースコンポーネントと MyFaces は元々は HTML で開発される。JSF は複数の出力形式をサポートしているため、JSF ベースのユーザーインタフェースの品質を向上させるため、Ajax を用いるコンポーネントを簡単に追加することができる。JSF 2.0 仕様では、UI ロジックの一部がサーバー側だけではなくクライアント側でも動作できるようにし、また JavaScript がブラウザで無効の場合にもうまく品質を落とせるようにすることで、Ajax のサポートを改善することを意図している。
Ajax を用いる JSF コンポーネントとフレームワーク
以下の企業やプロジェクトが Ajax に基づく JSF の実装や設計を提案している:
- ADF Faces ADF Faces Rich Client, (ADF Faces site)
- Backbase Enterprise Ajax ? JSF Edition, Ajax framework
- ICEfaces オープンソースの Java JSF 拡張フレームワークおよびリッチコンポーネント、JavaScript を用いない Ajax
- jBoss Ajax を用いた JSF コンポーネントである RichFaces および Ajax4JSF
- MyFaces Ajax コンポーネントを用いた JSF 実装
- Sun Java BluePrints AJAX Components (ウェブサイト)
- MB Technologies BindowsFaces (BindowsFaces のウェブサイト)
- ZK JSF コンポーネントを用いた Ajax フレームワーク (ZK JSF のサイト)
- J4Fry Ajax JSF Solution (J4Fry のオープンソースコミュニティサイト)
関連項目
参考文献
- JSF home page
- JSF specification
- JSR 314 (JSF 2.0)
- JSR 252 (JSF 1.2)
- JSR 127 (JSF 1.0 and 1.1)
書籍
- Jonas Jacobi, John R. Fallows: Pro JSF and Ajax, Apress, ISBN 1-59059-580-7
- Chris Schalk, Ed Burns, James Holmes: JavaServer Faces: The Complete Reference, McGraw-Hill Osborne Media, ISBN 0-07-226240-0
- David Geary, Cay Horstmann: Core JavaServer Faces, Second Edition, Prentice-Hall, 2007 ISBN 0-13-173886-0
- Kito D. Mann: JavaServer Faces in Action, Manning Publications Company, ISBN 1-932394-12-5
- Bill Dudney, Jonathan Lehr, Bill Willis, LeRoy Mattingly: Mastering JavaServer Faces, John Wiley & Sons, ISBN 0-471-46207-1
- Hans Bergsten: JavaServer Faces, O'Reilly & Associates, ISBN 0-596-00539-3
- Budi Kurniawan, Nancy Maragioglio: JavaServer Faces Programming, McGraw-Hill Osborne Media, ISBN 0-07-222983-7
- James Turner, Craig McClanahan, Kunal Mittal: JavaServer Faces Kick Start, SAMS, ISBN 0-672-32599-3
- John Ferguson Smart: JSF Jumpstart - A tutorial introduction to building web sites using JSF, published in electronic form.
外部リンク
- Core Servlets Tutorials Core Servlets Tutorials Page (英語)
- JSR 276 JavaServer Faces Components のための設計時の Metadata (英語)
- James Holmes' JSF Resources JSF に関する記事、ブログ、チュートリアルなどの膨大なリスト(英語)
- JSF Central JavaServer Faces コミュニティ(英語)
- JSF 編 Java EE チュートリアル(英語)
- JSF のチュートリアル、サンプル、記事の一覧(英語)
- JavaServer Faces Home java.net の JSF プロジェクトページ
- Apache MyFaces Apache MyFaces プロジェクト:Apache ソフトウェア財団傘下のオープンソースによる JSF 実装(英語)
- Java Server Faces についての Oracle の情報 (英語)
- JSF の Struts および Webworks との比較(英語)
- Javamagazin 誌での JSF, Struts と ZK の比較(ドイツ語)
- JSF Matrix 様々な JSF 実装と、その機能の比較(英語)
- Component Examples 標準および拡張コンポーネントの使用方法(英語)