JavaServer Faces

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動: 案内検索

JavaServer Faces (JSF) は、JavaベースのWebアプリケーションフレームワークである。Javaの拡張機能セットであるJava Platform, Enterprise Edition (Java EE) の仕様の一つに採用されている。

概要[編集]

他の伝統的なリクエスト駆動型のMVC Webフレームワークと異なり、JSFはコンポーネントベースのアプローチをとっている。 UIコンポーネントの状態は、クライアントが新しいページをリクエストした際に保存され、リクエストに対するレスポンスが返されるときに復帰される。JSFは当初、画面表示技術にJavaServer Pages (JSP) を用いていたが、2.0以降はより普通のHTMLに近いFaceletsが採用されている。

JSFには下記の要素が含まれる:

  • UIコンポーネントの表現、状態の管理、イベントのハンドル、値の変換、ページナビゲーションの定義、国際化とアクセシビリティサポートなどのためのAPIセット
  • UIコンポーネントのデフォルトのセット
  • JSPページ内のJavaServer Facesインタフェースを表現するための二つのJSPカスタムタグライブラリ
  • サーバサイドのイベントモデル
  • 状態の管理
  • 管理Bean (Managed Bean)
  • JSP 2.0 と JSF 1.2 のための式言語(EL 3.0以降は独立した規格となっている。)

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日): (DEPRECATED) JSF 仕様の最初のリリース
  • JSF 1.1(2004年5月27日): (DEPRECATED) バグフィックスリリース。HTML 仕様や HTML 出力部分に変更はない。
  • JSF 1.2(2006年5月11日): コアシステムとAPIに多くの改善を含むリリース。Java EEに採用された最初のバージョンで、Java EE 5に含まれる。
    • コンテンツ織込みの問題についての暫定的な解決策を提供する改善内容については、[1] に記述されている。
    • 設定ファイルに DTD の代わりに XML Schema を提供
    • Faces アプリケーションが、複数のフレームや複数のウインドウを持つ UI デザインができるような改善
    • TCKのサポート範囲を多くするための f: タグライブラリの改善、 f:view ライフタイムイベント、その他の小さな機能改善
    • API オブジェクトのデコレータのサポート
    • クライアント側での状態保存のためのセキュリティの改善
    • ボタンの多重押し問題の解決
    • 実装を容易にするため、仕様書を標準を記述している部分とそうでない部分を分離するよう整理
    • Portlet に関連するバグ修正
    • 最小限の仕様変更を伴うバグ修正
  • JSF 2.0(2009年6月28日) : 使いやすさの改善や機能の追加、パフォーマンスの向上が図られたメジャーリリース。Java EE 6 に含まれる。
  • JSF 2.1(2010年10月22日) : 2.0のメンテナンスリリースで、ごく小さな仕様変更が行われている。
  • JSF 2.2(2013年5月21日) : HTML5の対応、テンプレートを切り替えるリソース・ライブラリ・コントラクト、画面遷移を管理するFacesフロー、サーバー側でコンポーネントツリーを保持しないステートレス・モードの追加、といった変更が加えられている。Java EE 7 に含まれる。[1]

Facelets[編集]

Faceletsは、JSFのために開発されたWebテンプレートエンジンである。JSF 2.0からJSPに代わってJSFのデフォルトの画面表示技術として採用されている。Faceletsの最初のバージョンが登場したのは2005年のことで[2]、当時はJSF 1.1, 1.2をターゲットとしていた。JSFと同じコンポーネントベースのWebアプリケーションフレームワークであるApache Tapestryとは似通っており、Facelets自体もTapestryの考え方を一部取り入れている。[3]

Faceletsのテンプレートは主にXHTMLで作成される[3]。テンプレートを記述する方法としては、Facelets独自のXMLタグを直接埋め込む手法と、通常のXHTMLタグにjsfc属性を用いて間接的に埋め込む手法の2つがある。以下にまず独自のXMLタグを用いる場合の例を示す。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 
Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html">
    <body>
        <h:form>
            <h:outputText value="Welcome, #{loggedInUser.name}" disabled="#{empty loggedInUser}" />
            <h:inputText value="#{bean.property}" />
            <h:commandButton value="OK" action="#{bean.doSomething}" /> 
        </h:form>
    </body>
</html>

jsfc属性を用いた場合、上の例は以下のようになる。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 
Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html">
    <body>
        <form jsfc="h:form">
            <span jsfc="h:outputText" value="Welcome, #{loggedInUser.name}" disabled="#{empty loggedInUser}" />
            <input type="text" jsfc="h:inputText" value="#{bean.property}" />
            <input type="submit" jsfc="h:commandButton" value="OK" action="#{bean.doSomething}" /> 
        </form>
    </body>
</html>

jsfc属性を用いたテンプレートの場合、他のアプリケーションからは普通のXHTMLとして扱えるため、ブラウザーで表示を確認したり、WYSIWYGデザインツールを用いて編集したりすることができる。

他の Web GUI フレームワークとの比較[編集]

Struts[編集]

StrutsはApacheソフトウェア財団が提供するMVCフレームワークである。Strutsはpage-at-a-time型のMVCフレームワークを提供し、JSFスタイルのコンポーネントモデルは備えていない。

ページは入力をアクションに接続するディスパッチサーブレット (controller) を備えたモデルにマップされる。Strutsアプリケーションはビューを表示するために主にJSPを使用するため、手近なタグライブラリの使い方に影響を受けやすい。

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 の実装や設計を提案している:

脚注[編集]

参考文献[編集]

関連項目[編集]

外部リンク[編集]