Oracle Fusion Middleware Oracle Application Development Framework Java EE開発者ガイド 11g リリース1(11.1.1.5.0) B61007-03 |
|
前 |
次 |
この章では、ページに選択リスト・コンポーネントを追加する方法について説明します。
この章の内容は次のとおりです。
選択リストは、標準的なJSFリスト・コンポーネントと同様に機能します。ただし、ADF Facesのリスト・コンポーネントには追加の機能(ラベルとメッセージの表示、自動フォーム送信、部分ページ・レンダリングのサポートなど)が備わっています。
ユーザーがナビゲーション・リストから項目を選択すると、リストにバインドされた対応するコンポーネントでも、選択に応じて値が変更されます。たとえば、ユーザーがショッピング・リストから商品を選択すると、商品リストにバインドされている表が更新され、選択した商品の詳細が表示されます。
ADF Faces Coreには、リストから単一値および複数値を選択するコンポーネントが含まれています。たとえば、selectOneChoice
を使用するとドロップダウン・リストから項目を1つ選択でき、selectManyChoice
を使用するとチェック・ボックスのリストから項目を複数選択できます。表6-1で、選択リスト・コンポーネントについて説明します。
表6-1 ADF Facesの単一選択および複数選択リスト・コンポーネント
ADF Facesコンポーネント | 説明 | 例 |
---|---|---|
項目のリストから単一値を選択します。 |
||
ラジオ・ボタンのセットから単一値を選択します。 |
||
スクロール可能な項目のリストから単一値を選択します。 |
|
|
スクロール可能なチェック・ボックスのリストから複数値を選択します。リストの最上位に、選択した項目の名前が表示されます。 |
||
チェック・ボックスのグループから複数値を選択します。 |
|
|
スクロール可能なチェック・ボックスのリストから複数値を選択します。 |
|
SelectOneChoice
ADF Facesコンポーネントを使用して、選択リストを作成できます。作成の手順は、SelectOneRadio
やSelectOneListbox
のような他の単一値選択リストを作成する場合でも同様です。
データバインドされた選択リストは、アクセッサ戻りコレクションまたは静的リストの値を表示し、ユーザーの選択に基づいて別のコレクションの属性またはメソッド・パラメータを更新します。リストにバインディングを追加する場合は、リストで選択した値に基づいてデータが移入されるデータ・コントロールの属性を使用します。
注意: selectOneChoice コンポーネントでvaluePassThru=true を指定して、ADFモデルのリスト・バインディングを使用することはサポートされていません。リスト・バインディングは、値ではなく索引を戻します。 |
選択リストを作成するには、「リスト・バインディングの編集」ダイアログでベース・データソースとリスト・データソースを選択します。
「リスト・バインディングの編集」ダイアログでは、次の2種類の選択リストを作成できます。
他のデータソースから値を取得するのではなく、ユーザーが独自にコーディングした選択肢を含む選択リストを作成できます。
始める前に:
固定リストとしてコンポーネントに組み込む値リストを準備します。
固定の値リストにバインドされたリストを作成する手順:
「データ・コントロール」パネルから、属性をJSFページにドラッグ・アンド・ドロップし、「作成」→「単一選択」→「ADF選択肢を1つ選択」を選択します。
「リスト・バインディングの編集」ダイアログが表示されます。JSFページにドロップした属性を含むアクセッサ戻りコレクションが「ベース・データソース」リストでデフォルトで選択されています。
別のアクセッサ戻りコレクションを選択するには、リストの横にある「追加」アイコンをクリックします。
「固定リスト」ラジオ・ボタンを選択します。
「固定リスト」オプションを使用すると、定義済の静的リストからエンド・ユーザーが値を選択できます。
「ベース・データソース属性」リストで、属性を選択します。
「ベース・データソース属性」リストには、「ベース・データソース」リストで選択したコレクションのすべての属性が含まれています。たとえば、ベース・データソースとしてCountryCodes
を選択した場合、リストでCountryName
を選択できます。
「一連の値」ボックスで、リストに表示するそれぞれの値を入力します。[Enter]キーを押して値を設定してから、次の値を入力します。たとえば、国コードIndia
、Japan
およびRussia
を追加できます。
値を入力する順序は、実行時にSelectOneChoice
コントロールにリスト項目が表示される順序です。
SelectOneChoice
コンポーネントではnull
値がサポートされています。このため、ユーザーが項目を選択しない場合、その項目のラベルがブランクとして表示され、コンポーネントの値がデフォルトで空の文字列に設定されます。ブランクまたは空の文字列を使用せずに、null
値を表す文字列を指定できます。デフォルトでは、リストの先頭に新しい文字列が表示されます。
「OK」をクリックします。
実行時に、選択リスト・コンポーネントに動的に値を移入できます。
始める前に:
2つのデータソースを定義します。1つは動的な値リストを提供するリスト・データソース用、もう1つはユーザーの選択に基づいて更新されるベース・データソース用です。
動的に生成される値を含むバインドされた選択リストを作成する手順:
「データ・コントロール」パネルから、属性をJSFページにドラッグ・アンド・ドロップし、「作成」→「単一選択」→「ADF選択肢を1つ選択」を選択します。
「リスト・バインディングの編集」ダイアログが表示されます。JSFページにドロップした属性を含むアクセッサ戻りコレクションが「ベース・データソース」リストでデフォルトで選択されています。
別のアクセッサ戻りコレクションを選択するには、リストの横にある「追加」アイコンをクリックします。
「動的リスト」ラジオ・ボタンを選択します。
「動的リスト」オプションを使用すると、別のバインド値セットから更新される1つ以上のベース・データソース属性を指定できます。
「リスト・データソース」の横にある「追加」ボタンをクリックします。
「データソースの追加」ダイアログで、選択リストに値を移入するアクセッサ戻りコレクションを選択します。
注意: リスト・コレクションとベース・コレクションはマスター/ディテール関係になっている必要はありませんが、リスト・コレクション内の属性のタイプはベース・コレクション属性と同じである必要があります。 |
デフォルトのイテレータ名のままにして、「OK」をクリックします。
「リスト・バインディングの編集」ダイアログの「データ・マッピング」セクションが、デフォルトのデータ値およびリスト属性で更新されます。「データ値」コントロールには、選択リストでユーザーが項目を選択すると更新される、アクセッサ戻りコレクションの属性が含まれます。「リスト属性」コントロールには、選択リストに値を移入する属性が含まれます。
デフォルト・マッピングのままにするか、「データ値」リストおよび「リスト属性」リストから別の属性項目を選択して、マッピングを更新できます。
2番目のマッピングを追加するには、「追加」をクリックします。
「OK」をクリックします。
固定選択リストを追加すると、JSFページにソース・コードが追加され、ページ定義ファイルにリスト・バインディング・オブジェクトとイテレータ・バインディング・オブジェクトが追加されます。
例6-1に、固定SelectOneChoice
コンポーネントを追加した後のページのソース・コードを示します。
例6-1 JSFページのソース・コード内の固定SelectOneChoiceリスト
<af:selectOneChoice value="#{bindings.city.inputValue}" label="#{bindings.city.label}"> <f:selectItems value="#{bindings.city.items}"/> </af:selectOneChoice>
選択項目のリストを提供するためのf:selectItems
タグは、バインディング・コンテナ内のCountryId
リスト・バインディング・オブジェクトのitems
プロパティにバインドされています。
ページ定義ファイルでは、executables
要素内にイテレータ・バインディング・オブジェクトの定義が追加され、bindings
要素内にリスト・バインディング・オブジェクトの定義が追加されます(例6-2を参照)。
例6-2 ページ定義ファイル内の固定選択リストに対するリスト・バインディング・オブジェクト
<executables> <variableIterator id="variables"/> <iterator Binds="root" RangeSize="25" DataControl="SupplierFacadeLocal" id="SupplierFacadeLocalIterator"/> <accessorIterator MasterBinding="SupplierFacadeLocalIterator" Binds="addressesFindAll" RangeSize="25" DataControl="SupplierFacadeLocal" BeanClass="oracle.fodemo.supplier.model.Addresses" id="addressesFindAllIterator"/> </executables> <bindings> <list IterBinding="addressesFindAllIterator" id="city" DTSupportsMRU="true" StaticList="true"> <AttrNames> <Item Value="city"/> </AttrNames> <ValueList> <Item Value="redwood city"/> <Item Value="fremont"/> <Item Value="stockton"/> </ValueList> </list> </bindings>
動的選択リストをページに追加すると、JSFページにソース・コードが追加され、ページ定義ファイルにリスト・バインディング・オブジェクトとイテレータ・バインディング・オブジェクトが追加されます。
例6-3に、動的SelectOneChoice
コンポーネントを追加した後のページのソース・コードを示します。
例6-3 JSFページのソース・コード内の動的SelectOneChoiceリスト
<af:selectOneChoice value="#{bindings.orderId.inputValue}" label="#{bindings.orderId.label}" required="#{bindings.orderId.hints.mandatory}" shortDesc="#{bindings.orderId.hints.tooltip}" id="soc1"> <f:selectItems value="#{bindings.orderId.items}" id="si1"/> </af:selectOneChoice>
選択項目のリストを提供するためのf:selectItems
タグは、バインディング・コンテナ内のorderId
リスト・バインディング・オブジェクトのitems
プロパティにバインドされています。
ページ定義ファイルでは、executables
要素内にイテレータ・バインディング・オブジェクトの定義が追加され、bindings
要素内にリスト・バインディング・オブジェクトの定義が追加されます(図6-1を参照)。
例6-4 ページ定義ファイル内の動的選択リストに対するリスト・バインディング・オブジェクト
<executables> <variableIterator id="variables"/> <iterator Binds="root" RangeSize="25" DataControl="FODFacadeLocal" id="FODFacadeLocalIterator"/> <accessorIterator MasterBinding="FODFacadeLocalIterator" Binds="orders1FindAll" RangeSize="25" DataControl="FODFacadeLocal" BeanClass="oracle.model.Orders1" id="orders1FindAllIterator"/> <iterator Binds="root" RangeSize="25" DataControl="FODFacadeLocal" id="FODFacadeLocalIterator1"/> <accessorIterator MasterBinding="FODFacadeLocalIterator1" Binds="ordersFindAll" RangeSize="-1" DataControl="FODFacadeLocal" BeanClass="oracle.model.Orders" id="ordersFindAllIterator"/> </executables> <bindings> <list IterBinding="orders1FindAllIterator" id="orderId" DTSupportsMRU="true" StaticList="false" ListIter="ordersFindAllIterator"> <AttrNames> <Item Value="orderId"/> </AttrNames> <ListAttrNames> <Item Value="orderId"/> </ListAttrNames> <ListDisplayAttrNames> <Item Value="orderId"/> </ListDisplayAttrNames> </list> </bindings>
デフォルトでは、ordersFindAll
イテレータ・バインディングのiterator
要素のRangeSize
属性が値-1
に設定されるため、イテレータは選択対象として有効な商品の完全なリストを提供できます。list
要素で、id
属性は、リスト・バインディング・オブジェクトの名前を指定します。IterBinding
属性は、order1FindAll
コレクションを反復処理するイテレータを参照します。ListIter
属性は、ordersFindAll
コレクションを反復処理するイテレータを参照します。AttrNames
要素は、ベース・イテレータにより戻されるベース・データソース属性を指定します。ListAttrNames
要素は、ベース・データソース属性にマッピングされるリスト・データソース属性を定義します。ListDisplayAttrNames
要素は、実行時にユーザーに表示される値をリストに移入するリスト・データソース属性を指定します。
ナビゲーション・リスト・バインディングを使用すると、ユーザーがコレクション内のオブジェクトを移動できるようになります。ユーザーがナビゲーション・リスト・コンポーネントを使用して現在のオブジェクト選択を変更すると、属性を介して同じコレクションにバインドされている他のコンポーネントも、新しく選択したオブジェクトから表示されます。
また、コレクションの現在の行を変更したときに、そのコレクションがデータ・モデルのマスター/ディテール関係におけるマスター・コレクションである場合、ディテール・コレクションの行セットが自動的に更新され、新規の現在のマスター行に適したデータが表示されます。
始める前に:
「データ・コントロール」パネルでアクセッサ戻りコレクションを作成します。
ナビゲーション・リスト・バインディングを使用するリストの作成手順:
「データ・コントロール」パネルから、アクセッサ戻りコレクションをページにドラッグ・アンド・ドロップし、「作成」→「移動」→「ADFナビゲーション・リスト」を選択します。
「リスト・バインディングの編集」ダイアログの「ベース・データソース」ドロップダウン・リストからコレクションを選択します。このコレクションのメンバーがリストの作成に使用されます。
これは、「データ・コントロール」パネルからドラッグしたコレクションです。そのコレクションがドロップダウン・メニューに表示されない場合は、「追加」ボタンをクリックして目的のコレクションを選択します。
「属性の表示」ドロップダウン・リストから、属性を1つまたはすべて選択するか、「複数の選択」を選択して選択ダイアログを開きます。
「複数の表示属性の選択」ダイアログで、表示する属性を「使用可能な属性」ペインから「表示する属性」ペインに移動します。「OK」をクリックして、ダイアログを閉じます。
「OK」をクリックします。