X

An Oracle blog about WebLogic Channel

「JSF入門」レポート

WebLogic勉強会 通信

WebLogic Serverファンの皆様、こんにちは、WebLogic Server勉強会通信です。
2014年6月24日に開催された
「第48回WebLogic Server勉強会@東京」

「はじめてのJava EEアプリケーション開発シリーズ」(全4回)の

「第2回 JSF入門」
をレポートします。
JSF (JavaServer Faces)は、Webアプリケーションのユーザインタフェースを開発するための仕様です。
岡田さんがWebアプリのユーザインタフェースの要件、JSFの特長と構成、画面遷移、また、JSF画面コンポーネント、
入力値が適正な範囲かどうかなどをチェックするバリデーション(データ検証)機能、コンバータ(データ変換)機能などを説明しました。
次回の「第3回: EJB & CDI入門」は8月27日開催の予定です。
(日本オラクル Fusion Middleware事業統括本部 佐々木 政和)

JavaServer Facesとは

JSFはJava EEの仕様の一部です。Java EEはJava SE をベースにした企業システム向けのアプリケーションを作るための
仕組みです。この仕様を決めているのはオラクルだけでなく、業界の主要なベンダーが参加しているJava Community Processコミュニティで仕様を策定していて、標準仕様であることがポイントです。Java EE仕様は、JSF、Servlet、EJB、JPAなどのコンポーネント仕様と
データベースやメッセージングシステムとの連携用のサービスアクセスのための各種APIの規定です。
アプリケーションサーバベンダーは、Java EEの仕様に準拠したアプリケーションサーバ(Java EEを実装した基盤)を
開発し提供しています。(Oracle WebLogic Serverなど)
Java EE仕様に沿って開発されているアプリケーションはどのアプリケーションサーバ上にも大きな変更を加えることなく
簡単に動作させることができます。

JSFはJava EE仕様の1つです。、Webアプリケーションのユーザインタフェースを開発するためのフレームワークを規定しています。
ブラウザを使用したWebアプリケーションてはHTMLなどを使用して画面表示をしています。このHTMLはJSFのコンポーネントの
一つです。JSFの開発スタイルはHTMLをベースに、タグをべた打ちするのではなくGUIのパーツを組み合わせて開発するイメージ
です。例えば、ボタンが押された時のアクションを決める、といった具合です。
標準としてお勧めのビューはFaceletでXHTMLベースでできています。

JSFの構成要素

JSFのメリットの一つは標準ベースのアプリケーション開発を行えることです。
JSFをMVCモデル(コントローラ、ビュー、モデルから構成される)と捉えると、
ビューはFacelet、モデルはPOJO/マネージドBeanで、コントローラは
JSFのフレームワークとして提供されるFaces Servletです。
アプリケーション開発者が開発するのはFacelet, POJO/マネージドBeanです。

JSFの構成要素:
リクエストが入ってくるとFacesServletがリクエストを制御します。
最終的にはマネージドBeanを呼び出し、その結果をFaceletに渡して表示します。
必要に応じてコンバータを使用してデータ変換を行ったり
バリデータを使用してデータの検証、文字数をチェックします。
XHTMLに表示する場合は標準のレンダラーを使用できますが、
HTML以外に表示する場合は別途レンダラーを用意して利用する方法もあります。
JSF 1.Xなどの古いJSF仕様ではfaces-config.xhtmlが必要でしたが2.0からは不要です(オプション)。

JSFのライフサイクル


①ビューの生成/復元:
リクエストが入ってくるとビューの復元を実行します。
ビューの復元とは
リクエストに基づいてページのUIコンポーネントツリーを作成
(または復元)
することを示します。初期リクエスト時は作成します。2回目以降の場合は復元します。


入力値の適用:
送信されたフォームの値をUIコンポーネントに
適用します。コンバータが文字列データをJavaデータ型に変換します。


③検証処理:
UIコンポーネントに関連付けられた検証(バリデータ)を行います。


④モデル値の更新:
入力値の適用フェーズで適用されたUIコンポーネント値をマネージドBeanにコピーします。


⑤アプリケーションの呼び出し:
マネージドBeanのメソッドを呼び出してビジネスロジックを実行します。


⑥レスポンスのレンダリング:
マネージドBeanの値を読み取り(EL式)、レスポンスを返します。


実際には裏側でこの動きが起こっています。今回のサンプルではJSFライフサイクルの細かな動きを知る必要はありませんが、後半のプログラミング時にこのライフサイクルをイメージできると理解が深まります。

JSFの画面遷移

暗黙的なナビゲーションの指定方法は、簡単でaction="list"のようにactionで次ページの名前を指定します
(.xhtmlは省略可能)。これは、ページの遷移をするだけですが、もし、何らかのアクションをしたい場合は、
マネージドBeanのメソッドを指定することができます。指定されたマネージドBeanの
メソッドが呼ばれ、その処理の結果(この例ではlist画面を表示)で次のアクションが決まります。

上図の中では2パターンを説明しています。index.htmlの
action="list"はlist.xhtmlへの遷移になります。
action = "#productBean.navigation}"はマネージドBeanの
ProductBeanのnavigationメソッドに処理が移り、その中のreturn "list"で
list.xhtml画面に遷移します。

マネージドBeanのスコープ

マネージドBeanの作成:
基本はPOJO。ただし@ManagedBeanのアノテーションとスコープを指定します。
@ManagedBeanを指定するとJSFのコンテナでライフサイクルが管理されます。
ライフサイクルはスコープに基づき、「どの期間生存しているか」を
制御します。

マネージドBeanの実装

ManagedBeanの作成:
今回は一覧表示をしたいので、コレクションのListを使用しています。
画面遷移用のメソッドとしてtoList, toIndexメソッドを付加しています。
また、ManagedBeanの初期化のためには@PostConstructメソッドを追加することもできます。

EL式の使い方

FaceletからマネージドBeanにアクセスする時には、#を接頭辞に持つEL式を使用します。ルールを押さえておくことが重要です。

入力値の検証

検証(バリデータ)や変換(コンバータ)はJSFライフサイクル・フェーズで呼び出されます。
JSFでは標準でバリデータやコンバータを提供していますが、
Converter クラスや Validator クラスの開発、および Bean Validation も使用可能です。
入力必須のフィールド、入力値の範囲指定、入力値の変換、エラーメッセージの表示方法など
細かな制御が可能です。

JSFのまとめ

JSFはJava EE 標準の仕様の1つで、アプリケーション開発者は
JSF仕様に基づいたWebアプリケーションフレームワークを活用することで
アプリケーションのWebユーザインタフェース部分を効率的に開発することができます。
画面をコンポーネントベースで開発できることが大きな特長です。
アプリケーション開発者の役割は、Faceletで画面を作成することと、
ビジネスロジックであるマネージドBeanを開発することです。
Faceletを記述してプレゼンテーションを記述しますが、その際に
豊富なJSFタグが利用できるので簡単に最新の画面イメージを
実装できます。また、テンプレート・フレームワークも活用できます。
JSFでのページ遷移は、暗黙的なナビゲーションで開発をスピーディに
進めることができます。actionに遷移先を文字列で指定できます (index.xhtml の場合は index )。
またEL式 を使ってマネージドBean とメソッドを指定してプログラムに遷移することも可能です。
データはマネージドBeanで保持されます。
JSFコンテナによってインスタンスのライフサイクルが
管理されます。適切なスコープを指定することでリソースを効率良く使用することが可能です。


次回は「第3回 EJB & CDI入門」です。お楽しみに。




Be the first to comment

Comments ( 0 )
Please enter your name.Please provide a valid email address.Please enter a comment.CAPTCHA challenge response provided was incorrect. Please try again.Captcha
Oracle

Integrated Cloud Applications & Platform Services