ヘッダーをスキップ
Oracle SOA Suite開発者ガイド
10g(10.1.3.1.0)
B31839-01
  目次へ
目次
索引へ
索引

前へ
前へ
 
次へ
次へ
 

9.4 Webページに対するバッキングBeanの作成と使用

JSFのバッキングBeanは、主にUIロジックを提供し、アプリケーションのWeb層とビジネス層との間でデータを管理するために使用するJavaBeanです(データ転送オブジェクトに類似しています)。 通常は、JSFページごとに1つのバッキングBeanを設定します。 バッキングBeanには、ページで使用するUIコンポーネントのロジックとプロパティが格納されます。 たとえば、ユーザー・アクティビティの結果としてUIコンポーネントをプログラム上で変更したり、サービス・メソッドを起動するには、ページのバッキングBeanに必要なコードを記述し、コンポーネントをBean内の対応するプロパティまたはメソッドにバインドします。

たとえば、SOADEMO-CLIENTアプリケーションのRegisterバッキングBeanには、Registerコマンド・コンポーネントがバインドされるメソッドが格納されます。 ユーザーが「Register」ボタンをクリックすると、ページに入力されたデータが発行されて、このメソッドが起動します。 発行されたフィールドのデータはバッキングBeanを使用してコンポーネントのインスタンスにバインドされるため、メソッドでは、それらの値にアクセスしてCustomerオブジェクトを作成できます。

アプリケーションの起動時にバッキングBeanを使用可能にするには、そのバッキングBeanをマネージドBeanとしてfaces-config.xml内の名前とスコープに登録します。 実行時に、Beanが、JSF EL値またはメソッド・バインディング式を介してページで参照されるたびに、そのBeanは、JSF実装によって自動的にインスタンス化され、宣言されたデフォルト値が移入されて、faces-config.xmlの定義に従ってマネージドBeanのスコープに配置されます。

9.4.1 バッキングBeanの作成方法および構成方法

JSF構成エディタの「概要」モードを使用すると、バッキングBeanを宣言的に作成および構成できます。

バッキングBeanをマネージドBeanとして作成および構成する手順は、次のとおりです。

  1. アプリケーション・ナビゲータで、faces-config.xmlをダブルクリックし、その内容をJSF構成エディタのデフォルト・モードで開きます。

  2. 必要に応じて、エディタの下部にある「概要」タブを選択し、「概要」モードに切り替えます。

  3. 左側にある要素リストで、「Managed Bean」を選択します。

  4. 「新規」をクリックして、「マネージドBeanの作成」ダイアログを開きます。

  5. このダイアログで、マネージドBeanについて次のように指定します。

    • 名前: マネージドBeanの一意の識別子を入力します(例: SOA_Demo_Login)。 この識別子によって、Beanの完全修飾クラス名を使用するのではなく、EL式を使用して、アプリケーション内でBeanを参照する方法が判断されます。

    • クラス: 完全修飾クラス名を入力します(例: oracle.srdemo.view.backing.SoaDemoLogin)。 これは、ページで使用するUIコンポーネントのデータを保持するプロパティ、および対応するアクセッサ・メソッドとその他のメソッド(ナビゲーション、検証など)を格納するJavaBeanです。 クラスは、既存または新規のクラスの場合があります。

    • スコープ: この値によって、Beanが格納されるスコープが判断されます。 有効なスコープの値は次のとおりです。

      • アプリケーション: Webアプリケーションの期間中にBeanを使用できます。 これは、LDAPディレクトリなどのグローバルBeanの場合に便利です。

      • セッション: クライアントは、クライアントのセッション期間中にBeanを使用できます。

      • リクエスト: Beanがインスタンス化されてからレスポンスがクライアントに戻るまで、Beanを使用できます。 通常、これは現行ページの存続期間になります。 ページのバッキングBeanでは、通常このスコープが使用されます。

      • なし: Beanは、参照されるたびにインスタンス化されます。

  6. JavaクラスをJDeveloperに作成させる場合は、「クラスが存在しない場合は生成」チェック・ボックスを選択します。 すでにJavaクラスを作成している場合は、このチェック・ボックスを選択しないでください。


注意:

この時点では、JSFページとバッキングBeanの厳密な関係は定義されていません。 単にバッキングBeanをfaces-config.xmlに構成したのみですが、これで、ページでJSF EL式を使用してバッキングBeanを参照できます。

9.4.2 バッキングBeanの作成時と構成時の処理内容

「クラスが存在しない場合は生成」チェック・ボックスを選択した場合、JDeveloperでは、「クラス」の値として設定した完全修飾クラス名を使用して新規のJavaクラスが作成されます。 新規ファイルは、図9-8に示すように、アプリケーション・ナビゲータのViewControllerプロジェクトの「アプリケーション・ソース」ノード内に表示されます。

図9-8 ナビゲータに表示されたSOALoginページのバッキングBean

ViewControllerプロジェクトの「アプリケーション・ソース」フォルダ

バッキングBeanクラスを編集するには、アプリケーション・ナビゲータでファイル(例: SoaDemoLogin.java)をダブルクリックし、その内容をソース・エディタで開きます。 新規クラスの場合は、例9-2のように表示されます。

例9-2 JDeveloperで作成された空のJavaクラス

package oracle.soademo.view.backing;

public class SoaDemoLogin {
    public SoaDemoLogin() {
    }
}

JDeveloperでは、例9-3に示すように、<managed-bean>要素を使用してバッキングBean構成をfaces-config.xmlに追加します。

例9-3 マネージドBeanのfaces-config.xmlファイルへの登録

<faces-config xmlns="http://java.sun.com/JSF/Configuration">
  ...
  <!-- Page backing beans typically use request scope-->
  <managed-bean>
    <managed-bean-name>SOA_Demo_Login</managed-bean-name>
    <managed-bean-class>oracle.srdemo.view.backing.SoaDemoLogin</managed-bean-class>
    <managed-bean-scope>request</managed-bean-scope>
  </managed-bean>
  ...
</faces-config>

9.4.3 自動コンポーネント・バインディング機能の使用方法

JDeveloperには、JSFページのUIコンポーネント・インスタンスをバッキングBeanプロパティに自動的にバインドする機能があります。 UIコンポーネントを挿入するページに対して「自動バインド」機能をオンにすると、JDeveloperでは、プロパティ・コードがそのページのバッキングBeanに自動的に追加され、コンポーネントのbinding属性がバッキングBeanの対応するプロパティにバインドされます。 バッキングBeanではページのUIコンポーネントの属性をプログラムで変更する必要がない場合、自動コンポーネント・バインディング機能を使用する必要はありません。

自動コンポーネント・バインディングの使用は、第9.3.1項「JSF Webページの作成方法」の手順7で説明したように、JSFページの作成時に決定できます。 また、自動コンポーネント・バインディングは、既存のページに対しても手動でオンにできます。

既存のJSFページに対して自動コンポーネント・バインディングをオンにする手順は、次のとおりです。

  1. ビジュアル・エディタでJSFページを開きます。 エディタ・ウィンドウの下部にある「設計」を選択します。

  2. 「設計」「ページ・プロパティ」の順に選択し、「ページ・プロパティ」ダイアログを表示します。

  3. 「コンポーネント・バインディング」を選択します。

  4. 「自動バインド」を選択します。

  5. ドロップダウン・リストからマネージドBeanを選択するか、「新規」をクリックしてページに対する新規マネージドBeanを構成します。


注意:

JSFページで自動コンポーネント・バインディングをオンにすることで、JDeveloperでのページとバッキングBeanとの間に厳密な関係を定義します。

9.4.4 自動コンポーネント・バインディング使用時のJDeveloperでの処理内容

JSFページに対して「自動バインド」機能をオンにすると、ページの終わり近くに次のような特別なコメント行が表示されます。

...
   </f:view>
   <!--oracle-jdev-comment:auto-binding-backing-bean-name:backing_soaDemoPage-->
</jsp:root>

faces-config.xmlには、ページのバッキングBean構成の最後に同様のコメント行が挿入されます。

<managed-bean>
  <managed-bean-name>backing_soaDemoPage</managed-bean-name>
  <managed-bean-class>oracle.srdemo.view.backing.soaDemoPage</managed-bean-class>
  <managed-bean-scope>request</managed-bean-scope>
  <!--oracle-jdev-comment:managed-bean-jsp-link:1soaDemoPage.jsp-->
</managed-bean>

ページに対して「自動バインド」機能をオンにすると、UIコンポーネントをページに追加するたびに、JDeveloperで次の処理が実行されます。

  • コンポーネントのプロパティおよびプロパティ・アクセッサ・メソッドがバッキングBeanに追加されます。 たとえば、次のコードSnippetは、inputTextおよびcommandButtonコンポーネントに対して追加されたコードを示しています。

        private CoreInputText inputText1;
        private CoreCommandButton commandButton1;
        public void setInputText1(CoreInputText inputText1) {
            this.inputText1 = inputText1;
        }
    
        public CoreInputText getInputText1() {
            return inputText1;
        }
    
        public void setCommandButton1(CoreCommandButton commandButton1) {
            this.commandButton1 = commandButton1;
        }
    
        public CoreCommandButton getCommandButton1() {
            return commandButton1;
        }
    
    
  • 次のコードSnippetに示すように、EL式をbinding属性の値として使用して、コンポーネントが対応するBeanプロパティにバインドされます。

    <af:inputText binding="#{backing_soaDemoPage.inputText1}"
    <af:commandButton binding="#{backing_soaDemoPage.commandButton1}"
    
    

ページに対して「自動バインド」機能をオフにすると、JDeveloperではJSFページおよびfaces-config.xmlから特別なコメント行が削除されます。 ページのbinding EL式および関連のバッキングBeanコードは削除されません。


ヒント:

「自動バインド」がオンの状態で、ページからUIコンポーネントを削除すると、JDeveloperでは、対応するプロパティとアクセッサ・メソッドがそのページのバッキングBeanから自動的に削除されます。