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  次のページ

書籍紹介
まるごとサーバサイドJava! Vol.1
まるごとサーバサイドJava! Vol.1 〜初心者からプロまですべての開発者に贈る〜サーバサイドJavaのすべてをまるごと紹介
サーバサイドで実行されるシステム環境Java EEを取り巻く環境は一大変革を遂げようとしています。J2EE時代のEJB(Enterprise Java Beans)からPOJO(Plain Old Java Object)へ、オブジェクト指向からアスペクト指向へ。Sun Microsystems外から発生した新しい流れは本家Java EE 5へ取り入れられる予定です。本書はこうしたJavaの新潮流を余すことなくお伝えします。

発売日:2006/09/01
定価:\2,415(本体 \2,300+税)
著者:WINGSプロジェクト 佐藤治夫(株式会社ビープラウド)、小泉守義 監修:山田祥寛
著者プロフィール
著者:WINGSプロジェクト 佐藤治夫(株式会社ビープラウド)、
小泉守義
監修:山田祥寛

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


この記事の評価をお聞かせください
ボタンをクリックしますとウインドウが開きます。

INDEX
第10回:モデルとビューを統合する
モデルとビューの統合
  マネージドBeanとマネージドプロパティの設定
  マネージドBeanの定義
JDeveloperで学ぶJSF入門
第1回 JSFの特長
第2回 JSFを構成する要素
第3回 JSFのライフサイクルとStrutsとの比較
第4回 環境設定
第5回 JSFアプリケーションを作成しよう
第6回 情報入力ページの作成
第7回 コマンドボタンの配置と結果出力ページの作成
第8回 バリデータの設定とメッセージの日本語化
第9回 アプリケーションロジックを追加する
第10回 モデルとビューを統合する
第11回 バインディングとテスト
第12回 カスタムバリデータの作成方法〜JSFをより高度に利用するために
第13回 独自のバリデータタグの作成
第14回 カスタムコンバータの作成
第15回 カスタムコンポーネントの作成(前編)
第16回 カスタムコンポーネントの作成(後編)