TOPシステム開発> コンポーネントとマネージドBeanのバインディング
まるごとサーバサイドJava
JDeveloperで学ぶJSF入門

第11回:バインディングとテスト

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

監修:山田祥寛   2006/8/25
1   2  次のページ
コンポーネントとマネージドBeanのバインディング

   最後に、コンポーネントとマネージドBeanのバインディングを行います。まず、プロパティ・インスペクタでinput.jspの入力コンポーネントのvalue属性を、それぞれ表1にしたがって書き換えます。
コンポーネントID value属性に記述するバインディング式
birthYear #{userInfo.birthYear}
birthMonth #{userInfo.birthMonth}
birthDay #{userInfo.birthDay}
sex #{userInfo.sex}
bloodType #{userInfo.bloodType}

表1:input.jspの各コンポーネントに指定する値バインディング

   例として、birthYearのバインディングの指定を図1に示しました。

birthYearへのバインディング指定
図1:birthYearへのバインディング指定
(画像をクリックすると別ウィンドウに拡大図を表示します)

   JSFタグの属性に値バインディング式を記述すると、Update Model Valueフェーズで、値バインディング式を指定した入力コンポーネントの入力値が指定されたマネージドBeanのプロパティに格納されるとともに、Render Responseフェーズで指定されたプロパティの値が出力されます。

   次に、「占う」ボタンのaction属性にメソッドバインディング式(#{fortuneTellingService.doFortuneTelling})を指定し、マネージドBeanとしてJSF変数のfortuneTellingServiceに格納されているFortuneTellingServiceオブジェクトのdoFortuneTelling()メソッドがボタンのクリックに伴って呼び出されるようにします。ここでメソッドバインディング式という言葉が出てきましたが、これはBeanのプロパティではなく、Beanに記述されたメソッドを参照する記述です。

   値バインディングとメソッドバインディングは、見た目の違いはまったくありませんが、参照する対象が異なることから呼び方を区別しています。

   output.jspには、最初の手順でダミーとして「***」という文字列を入れていた部分に、次の結果を取得する値バインディング式を記述します。

#{fortuneTellingService.result}

   「他の人を占う」ボタンは、「占う」ボタンと同様にFortuneTellingServiceオブジェクトのdoRetry()メソッドがアクションメソッドとして呼び出されるように、次のメソッドバインディング式を指定します。

#{fortuneTellingService.doRetry}

   以上で、JSFによる本格的な占いアプリケーションが完成しました。最終的なJSPのソースコードをリスト1(input.jsp)をリスト2(output.jsp)に示します。

リスト1:input.jsp(完成版)

(画像をクリックすると別ウィンドウに拡大図を表示します)

リスト2:result.jsp(完成版)
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<%@ page contentType="text/html;charset=windows-31j"%>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
<f:view>
   <html>
      <head>
         <meta http-equiv="Content-Type" content="text/html; charset=windows-31j"></meta>
         <title>
            result
         </title>
      </head>
      <body>
         <h:form>
            <h:panelGrid>
               <h:outputText value="あなたのラッキー周辺機器は:"/>
               <h:outputText value="#{fortuneTellingService.result}"/>
               <h:outputText value="です。"/>
               <h:commandButton value="別の人を占う"action="#{fortuneTellingService.doRetry}"/>
            </h:panelGrid>
         </h:form>
      </body>
   </html>
</f:view>

1   2  次のページ

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

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


INDEX
第11回:バインディングとテスト
コンポーネントとマネージドBeanのバインディング
  完成したアプリケーションのテスト