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のスコープに配置されます。
JSF構成エディタの「概要」モードを使用すると、バッキングBeanを宣言的に作成および構成できます。
バッキングBeanをマネージドBeanとして作成および構成する手順は、次のとおりです。
アプリケーション・ナビゲータで、faces-config.xml
をダブルクリックし、その内容をJSF構成エディタのデフォルト・モードで開きます。
必要に応じて、エディタの下部にある「概要」タブを選択し、「概要」モードに切り替えます。
左側にある要素リストで、「Managed Bean」を選択します。
「新規」をクリックして、「マネージドBeanの作成」ダイアログを開きます。
このダイアログで、マネージド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は、参照されるたびにインスタンス化されます。
JavaクラスをJDeveloperに作成させる場合は、「クラスが存在しない場合は生成」チェック・ボックスを選択します。 すでにJavaクラスを作成している場合は、このチェック・ボックスを選択しないでください。
注意: この時点では、JSFページとバッキングBeanの厳密な関係は定義されていません。 単にバッキングBeanをfaces-config.xml に構成したのみですが、これで、ページでJSF EL式を使用してバッキングBeanを参照できます。 |
「クラスが存在しない場合は生成」チェック・ボックスを選択した場合、JDeveloperでは、「クラス」の値として設定した完全修飾クラス名を使用して新規のJavaクラスが作成されます。 新規ファイルは、図9-8に示すように、アプリケーション・ナビゲータの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>
JDeveloperには、JSFページのUIコンポーネント・インスタンスをバッキングBeanプロパティに自動的にバインドする機能があります。 UIコンポーネントを挿入するページに対して「自動バインド」機能をオンにすると、JDeveloperでは、プロパティ・コードがそのページのバッキングBeanに自動的に追加され、コンポーネントのbinding
属性がバッキングBeanの対応するプロパティにバインドされます。 バッキングBeanではページのUIコンポーネントの属性をプログラムで変更する必要がない場合、自動コンポーネント・バインディング機能を使用する必要はありません。
自動コンポーネント・バインディングの使用は、第9.3.1項「JSF Webページの作成方法」の手順7で説明したように、JSFページの作成時に決定できます。 また、自動コンポーネント・バインディングは、既存のページに対しても手動でオンにできます。
既存のJSFページに対して自動コンポーネント・バインディングをオンにする手順は、次のとおりです。
ビジュアル・エディタでJSFページを開きます。 エディタ・ウィンドウの下部にある「設計」を選択します。
「設計」→「ページ・プロパティ」の順に選択し、「ページ・プロパティ」ダイアログを表示します。
「コンポーネント・バインディング」を選択します。
「自動バインド」を選択します。
ドロップダウン・リストからマネージドBeanを選択するか、「新規」をクリックしてページに対する新規マネージドBeanを構成します。
注意: JSFページで自動コンポーネント・バインディングをオンにすることで、JDeveloperでのページとバッキングBeanとの間に厳密な関係を定義します。 |
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から自動的に削除されます。 |