TOPシステム開発> モデルとビューの統合
まるごとサーバサイドJava
JDeveloperで学ぶJSF入門

第10回:モデルとビューを統合する

著者:WINGSプロジェクト  佐藤治夫(株式会社ビープラウド)、
小泉守義

監修:山田祥寛   2006/8/24
1   2  3  次のページ
モデルとビューの統合

   続いて、モデルとビューの統合を行います。統合に必要となる作業は次の3つです。
  1. サービスクラス(FortuneTellingServiceクラス)の実装
  2. 各入力コンポーネントへの値バインディング設定
  3. アクションコンポーネントへのメソッドバインディング設定

表1:統合までの手順

   では、この順に作業を進めていくことにしましょう。


サービスクラスの実装

   サービスクラスは、ビューに依存する部分とロジックに依存する部分を貼り合わせる役割を担うものです。

   この占いアプリケーションでは「占う」ボタンのクリックで呼び出されるアクションメソッド(doFortuneTelling()メソッド)、「占う」アクションの結果を返すゲッターメソッド(getResult()メソッド)、「他の人を占う」ボタンのクリックで呼び出されるアクションメソッド(doRetry()メソッド)の3つを実装します。

   これまでに登場した2つのクラスとサービスクラスとの関係をUMLで表したものを図1に示します。

クラスの関係図
図1:クラスの関係図

   サービスクラス(FortuneTellingService.java)のソースコードはリスト1のとおりです。このソースコードは「Model」プロジェクトではなく、「ViewController」プロジェクトのほうに追加します。

リスト1:FortuneTellingService.java
リスト1:FortuneTellingService.java
(画像をクリックすると別ウィンドウに拡大図を表示します)

   ソースコードで注目すべき点は、アクションメソッドの戻り値です。JSFの仕様では、アクションメソッドは遷移ケースIDを文字列として返すことが期待されているので、アクションの結果に即したものを返します。

   今回の占いアプリケーションでは、tellFortune()メソッドによって例外が発生するような失敗ケースはないので、doFortuneTelling()アクションメソッドは単純に「show result」という遷移ケースIDを返します。同様に、doRetry()アクションメソッドも遷移ケースID「retry」を返しています。

   ほかには、FortuneTellerクラスやUserInfoクラスのインスタンスをFortuneTellingServiceクラス内で生成せず、setFortuneTeller()/setUserInfo()の両セッターで受け取ったものを使っているところにも注目してください。実は、これらのインスタンスはJSFによって管理(マネージ)され、デプロイ時にセッターを通じてインスタンスが与えられるようになっています。

   これにより、サービス(FortuneTeller)や、画面で入力された値を格納したBean(UserInfo)が、FortuneTellingServiceに自動で与えられることになり、インスタンス生成や値の型変換などの処理が不要となり、クラス間の依存関係が少なくなります(注3)。

※注3: アプリケーション内のクラスの依存関係がアプリケーションオブジェクトを保持する側(JSFコンテナ)によって決定されることから、このような実装パターンは依存性注入(Dependency Injection)と呼ばれます。JSFはDIコンテナとしての性格も持っているといえるでしょう。

1   2  3  次のページ

著者:WINGSプロジェクト 佐藤治夫(株式会社ビープラウド)、小泉守義 監修:山田祥寛
著者プロフィール
著者:WINGSプロジェクト 佐藤治夫(株式会社ビープラウド)、
小泉守義
監修:山田祥寛

WINGSプロジェクトは、有限会社WINGSプロジェクト(代表取締役山田祥寛)が運営するライティング・チーム。海外記事の翻訳から、主にサーバサイド分野の書籍/雑誌/Web記事の執筆、講演、アプリケーション開発などを幅広く手がける。2006年7月時点での登録メンバーは20名で、現在も一緒に執筆をできる有志を募集中。執筆に興味のある方は、どしどし応募いただきたい。


INDEX
第10回:モデルとビューを統合する
モデルとビューの統合
  マネージドBeanとマネージドプロパティの設定
  マネージドBeanの定義