【JavaEE】今からでも間にあうJSF入門

技術

どうもこんにちは。
新人教育担当のシンジです。

さて今回は、私が業務で浸透させていきたい技術について書いていこうと思います。

【JavaEE入門】JSFに触れてみよう_画像1

みなさんは、Webアプリケーションを作るときに、言語は何使いますか?フレームワークは何使いますか?データベースは何使いますか?こういったアーキテクチャを決定する材料は、アプリケーションの規模だったり、ターゲットが誰であるとか様々だと思います。

僕の中では、ある程度の判断基準というものがあります。さて、ここにWebアプリケーションがあるとします。
何で作りますか?生産性重視でRuby on Rails?学習コスト重視でPHP?または、保守重視でJava?

単純なWebアプリケーションであれば、Javaを使うまでもなくRuby on Railsがいいのでしょうかね。どうしてもJavaを使いたいのだというならば、僕が以前ブログの記事で書いた Playframework icon-external-link を使いましょう。Ruby on Railsの恩恵を受けて設計されているので、生産性は高いです。

【JavaEE入門】JSFに触れてみよう_画像2

 

じゃあ、ここで外部システム連携、バッチ機能を導入することになったとしましょう。

さて、どうしましょう。ここまで来たら、やはりJavaですね。JavaはJavaでもここで言ってるのはJavaEEのことです。JavaEEの歴史については、本題から外れるので割愛させてもらいますが、JavaEEの前身であるJ2EEをベースに作られたフレームワークは数多く存在します。「Spring Framework」、「Seasar2」、「Struts」など、一昔では流行っていたものは、J2EEベースに作られています。

Webアプリケーションを開発するにあたり、重要なアーキテクチャスタイルにMVCというものがあります。M(odel)V(iew)C(ontroller)と呼ばれるアーキテクチャは、業務ロジック処理、画面表示処理、それらをコントロールする処理などの役割分担を明確にすることで、メンテナンス性の向上が期待できます。そこで今回、MVCモデルをベースに作られたJavaEE純正のフレームワークであるJSFについて、説明していきます。

 

JSFコンポーネントベースのフレームワークであり、Strutsなどのアクションベースとは異なります。では、コンポーネントベースとアクションベースの違いから見ていきましょう。

【JavaEE入門】JSFに触れてみよう_画像1

Seasar2やStrutsなどはURLを元にアクションが決まり、そのアクション内で表示する画面が決まります。これをアクションベースフレームワークと呼びます。一方、今回説明するJSFは、まず表示する画面が決まり、それに対応する画面処理クラス(バッキングビーン)が決まります。これを一般的にコンポーネントベースフレームワークと呼びます。

 

ちなみにVisualStudioでおなじみの.NETもコンポーネントベースになっています。あと注目すべき点は、View側のファイルがxhtmlであることです。今までのJavaによるWebアプリケーション開発は、経験上ほとんどJSPで作ることが多いです。一番使われているJSPですが、サーブレットコンテナを介さずに表示しようしたら表示できますか?

できないですよね?実際にやってみるとわかりますが、JSPの内容がレンダリングされずそのまま表示されます。一方、xhtmlはレンダリング可能なファイルとして解釈されるため、表示できます。そのメリットとしては、開発チームとデザインチームで分業が可能になるという点です。

 

JSFを使ってみよう。

簡単な例で、JSFを実際に使ってみましょう。

 icon-check 準備するもの

開発環境は NetBeans(Ver.8.0.2)、JDK 7、GlassFish(Ver.4.1)になります。

・NetBeansのダウンロード https://netbeans.org/ icon-external-link
・JDK7のダウンロード http://www.oracle.com/technetwork/java/javase/downloads/index.html icon-external-link
・GlassFish 

※ GlassFishについてはNetBeansインストール時に自動でインストールされます。

 

 icon-check プロジェクトの作成

1. プロジェクトを作成
[ファイル]⇒ [新規プロジェクト]を選択する。

【JavaEE入門】JSFに触れてみよう
【JavaEE入門】JSFに触れてみよう
【JavaEE入門】JSFに触れてみよう
【JavaEE入門】JSFに触れてみよう
 

2.バッキングビーンを作成しましょう

バッキングビーンとは画面をコントロールするためのクラスのことです。

helloのプロジェクト内のデフォルトパッケージを右クリックし、[新規]⇒[その他]を選択する。

【JavaEE入門】JSFに触れてみよう
【JavaEE入門】JSFに触れてみよう
 

HelloBean.javaが作成されたら、以下の内容を記述してください。

1行目@ManagedBeanアノテーションはクラスに任意の名前をつけるアノテーションです。バッキングビーンを作成する際は必ず指定します。@ManagedBeanアノテーションのname属性は省略可です。省略した場合、デフォルトでクラス名の頭小文字がEL式での参照名になります。参照名を別名にしたい場合に設定するようにしてください。
例)@ManagedBean(name=”参照名”)

2行目@RequestScopedはバッキングビーンのインスタンスの生存期間を表すスコープです。@RequestScopedの場合、リクエストごとにインスタンスが生成、破棄が行われます。他にも以下ようなのアノテーションが存在します。

@ApplicationScope・・・アプリケーションが起動してから停止するまで
@SessionScope・・・ユーザがログインしてからログアウトするまで

15行目@PostConstructアノテーションは、画面の初期表示時に実行したいメソッドを指定する場合に使います。例えば、住所の入力フォームとして都道府県のプルダウンリストを作成する場合などに利用します。

 

3.入力画面(input.xhtml)を作成しましょう。

helloプロジェクト内のWebページを右クリックし、[新規]⇒[その他]を選択する。

【JavaEE入門】JSFに触れてみよう
【JavaEE入門】JSFに触れてみよう
 

3行目xmlns:h=”http://java.sun.com/jsf/html”はFaceletsタグを使うための宣言です。Faceletsタグとは、「h:」で始まるタグのことです。今回の例でいうところの「h:head」「h:body」などです。#{helloBean.xxxxx}のhelloBeanはバッキングビーンを参照します。

 

4.出力画面(output.xhtml)を作成しましょう.

input.xhtmlと同様に作成してください。

9行目バッキングビーンのmsgの内容が出力されます。

 

確認してみよう

早速、GlassFishを起動させて、確認してみましょう。

GlassFishを起動するには、Netbeans上のプロジェクト(今回の場合はhello)を右クリックし、実行をクリックします。起動したら、http://localhost:8080/hello/faces/input.xhtml icon-external-link にアクセスしてください。以下のような画面が表示されれば、OKです。

【JavaEE入門】JSFに触れてみよう

名前と年齢を入力し、送信ボタンをクリックしてみてください。結果が表示されましたか?

では、どのような仕組みになっているか簡単にみていきましょう。

 

JSFのライフサイクル

リクエストからレスポンスまでの流れを、JSFのライフサイクル(手順)と呼びます。
 

①コンポーネントツリーの復元

FacesContextと呼ばれるメモリ上の領域から対応するコンポーネントツリーを取り出す。
【JavaEE入門】JSFに触れてみよう

FacesContextにない場合、新たにコンポーネントツリーを作成し、⑥を行う。
 

②入力値をコンポーネントにセット

リクエスト情報から取得した値を対応するコンポーネントにセットする。
【JavaEE入門】JSFに触れてみよう

 

③入力値を検証

入力条件が設定されている場合、検証を行う。
【JavaEE入門】JSFに触れてみよう

 

④バッキングビーンの変数にセット

バッキングビーンの対応するフィールドに値をセットする。
【JavaEE入門】JSFに触れてみよう

 

⑤処理の実行

ビジネスロジック呼び出し
【JavaEE入門】JSFに触れてみよう

 

⑥画面を生成して返す

FacesContextにコンポーネントツリーを保存する。
【JavaEE入門】JSFに触れてみよう
【JavaEE入門】JSFに触れてみよう
 

今回、覚えていただきたいのは、以下の3点です。

・コンポーネントベースの考え方
・JSFによる実装方法
・JSFのライフサイクル

Java Server Faceを僕なりに訳すと、「Javaで書かれたサーバの顔」です。やはり第一印象、見た目が重要で僕も常に意識しています。JSFも同様で、いかにUIを簡単、かつわかりやすく実装できるかに重点をおいているので、直感的でわかりやすいフレームワークになっています。

今後新規で開発を行う際に、JSFを検討してみてはいかがでしょうか?
 

では、素敵なJSFライフを。

 

 

̃Gg[͂ĂȃubN}[Nɒlj