コンポーネント・タグの属性の値をアプリケーション内の別のクラスにあるプロパティの値にバインドすることで、動的データを表示または更新できます。これは、値バインディングと呼ばれます。値バインディングにはJSF EL式を使用します。
通常、値バインディングの対象はマネージドBeanのプロパティです。たとえば、従業員の名前を表示する式は、#{employee.firstName}
のようになります。この式のemployeeはfaces-config.xml
ファイルに登録されているマネージドBeanの名前、firstName
はそのBeanのプロパティです。
JSF実装でJSF EL式が検出されると、式の最初の部分(前述の例ではemployee)が、次の表に示されているJSF事前定義の暗黙オブジェクトのリストで検索されます(セッション・オブジェクト以外のオブジェクトはすべて読取り専用であるため、UIInput
コンポーネントの値として使用しないでください)。
暗黙オブジェクト |
内容 |
adfFacesContext
|
現在のリクエストのadfFacescontext 。
|
|
アプリケーション・スコープの属性値の |
|
現在のリクエストのCookie値の |
|
現在のリクエストの |
|
現在のリクエストのHTTPヘッダー値の |
|
|
|
このWebアプリケーションのコンテキスト初期化パラメータの |
|
このリクエストのリクエスト・パラメータの |
|
|
|
このリクエストのリクエスト属性の |
sessionScope
|
このリクエストのセッション属性のMap 。属性名がキーです。
|
|
このリクエストに対する |
このリストで検出されない場合、実装では、リクエスト、セッションおよびアプリケーションのスコープが(この順序で)検索されます。この中でも検出されない場合は、JSF VariableResolver
を使用して、名前が、faces-config.xml
構成ファイルに登録されているすべてのマネージドBeanの名前と比較されます。ここで検出された場合は、マネージドBean作成機能によって、Beanでデフォルトのコンストラクタ・メソッドがコールされ、Beanがインスタンス化されます。データを表示するコンポーネント・タグに、Beanのプロパティにバインドされている属性がある場合は、対応するget
メソッドがBeanでコールされ、データが表示されます。バインドされたタグでデータが取得されると、対応するset
メソッドがコールされ、新規データでBeanが更新されます。
事前定義のオブジェクト、スコープ内のオブジェクトまたはマネージドBeanのいずれかに加えて、値バインディングの対象をプリミティブ、構造またはコレクションにしたり、式に文字列リテラルを含めることもできます。
たとえば、JSFページで、従業員名、部門番号および雇用日の従業員情報を収集するとします。これらはすべて、既存のview.backing.Employee
Beanのプロパティです。ユーザーがそのページで情報を入力して発行したときは、そのデータでEmployee
Beanを更新し、アプリケーションのバックエンドでオブジェクトを処理してデータベースを更新します。ページは、次のようになります。
Employee
Beanを更新するには、JSPで、データを収集するinputText
タグを、JSF EL式を使用してEmployee
Beanの対応するプロパティに値バインドします。たとえば、従業員の名前を収集するテキスト・ボックスに対するJSPのコードは、次のようになります。
<h:inputText value="#{employee.name}"/>
前述のように、コンポーネント・タグの値は、JSPで使用可能な暗黙オブジェクトやリソース・バンドルなどの他のクラスにバインドすることもできます。たとえば、loadBundle
タグを使用して、JSPでリソース・バンドルをロードする場合は、コンポーネント・タグの値を、そのリソース・バンドル内のメッセージにバインドできます。前述の例を使用すると、outputLabel
タグの値として"Employee Name"と入力するかわりに、式を使用して、値をリソース・バンドルのname
メッセージにバインドします。この方法では、リソース・バンドルの複数のバージョンを使用して、テキストを簡単にローカライズできます。
JSPのコードは、次のようになります。
<f: loadBudle basename="view.messages" var="msgs">
...
<p>
<h:outputLabel value="#{msgs.name}"/>
<h:inputText value="#{employee.name}"/>
</p>
<p>
<h:outputLabel value="#{msgs.deptno}"/>
<h:inputText value="#{employee.deptno}"/>
</p>
<p>
<h:outputLabel value="#{msgs.hiredate}"/>
<h:inputText value="#{employee.hiredate}"/>
</p>
この例では、コンポーネント・タグのValue
属性がデータにバインドされます。この場合、コンポーネント自体と同じタイプにバインドする必要はありません。
Binding
属性を使用すると、コンポーネント・インスタンスをBeanのプロパティにバインドすることもできます。この方法では、コンポーネントの表示を詳細に制御できますが、Binding
属性の値は、コンポーネントと同じタイプであることが必要です。詳細は、「タグ属性のバインドとコンポーネント・インスタンスのバインドの比較」を参照してください。
ほとんどのタグ属性で値バインディングを使用できます。ただし、次のタグ属性ではメソッド・バインディングを使用する必要があります。
action
actionListener
validator
valueChangeListener
詳細は、「メソッド・バインディングについて」を参照してください。
マネージドBeanについて
マネージドBeanおよびバッキングBeanの開発
プロパティへのコンポーネントの値バインド
Copyright © 1997, 2006, Oracle. All rights reserved.