JDeveloper 11g によるリッチクライアント開発

第5章 ADF Modelを使用したアプリケーションの作成

日本オラクル株式会社 セールスコンサルティング統括本部
Fusion Middleware SC本部 Fusion Middleware レディネス部
智野 潤子 (ちの じゅんこ)

目次

Part1

Part2

パネルの追加

この節では、データベース表から取得したデータを表示するテーブルやグラフを配置するために次の2つのコンポーネントを追加します。

  • タブ区切りパネルのタブ・ページ(af:showDetailItemタグ)
  • スプリッタ区切りパネル(af:panelSplitterタグ)

図26 この節の作業する部分
図26 この節の作業する部分

タブ区切りパネルにタブ・ページを追加

最初に、第4章で作成したindex.jspxに新しいタブ・ページを追加します。エディタ・ウィンドウでindex.jspxを開いて [ファイル一覧]タブを右クリックし、コンテキスト・メニューから[Show Detail Item – ファイル一覧の後ろに挿入]→[Show Detail Item]を選択します。

図27 コンテキスト・メニューから[Show Detail Item]を選択
図27 コンテキスト・メニューから[Show Detail Item]を選択

これにより、index.jspxにaf:showDetailItemタグが追加されるので、エディタ・ウィンドウでタブをクリックします。プロパティ・インスペクタでは、追加されたaf:showDetailItemタグの属性が編集できるようになっているので、[Common]カテゴリの[Text]に「HRデータ」と入力します。

図28 プロパティ・インスペクタで[Text]と[Disclosed]の値を編集
図28 プロパティ・インスペクタで[Text]と[Disclosed]の値を編集

スプリッタ区切りパネル

次に、追加したタブ・ページにスプリッタ区切りパネルを追加します。コンポーネント・パレット上部のドロップダウン・リストで[ADF Faces]を選択し、[Layout]パネルに表示されている[パネル・スプリッタ]を図29のようにエディタ・ウィンドウにドラッグ&ドロップします。

図29 [パネル・スプリッタ]をエディタ・ウィンドウにドラッグ&ドロップ
図29 [パネル・スプリッタ]をエディタ・ウィンドウにドラッグ&ドロップ

[パネル・スプリッタ]をエディタ・ウィンドウにドロップすると、af:panelSplitterタグが追加されます。スプリッタ区切りパネルは、2つの領域が左右に配置されるので、上下に配置されるように変更します。エディタ・ウィンドウまたは構造ウィンドウで追加されたaf:panelSplitterタグを選択し、プロパティ・インスペクタの[Common]カテゴリの[Orientation]で「vertical」を選択します。

図30 プロパティ・インスペクタで[Orientation]の値を変更
図30 プロパティ・インスペクタで[Orientation]の値を変更

次に、パネルの幅と高さを指定するために、プロパティ・インスペクタの[Style]カテゴリを開きます。[ボックス]タブをクリックして、[Width]および[Height]に「100」と入力します。これにより、[InlineStyle]に「width:100%; height: 100%」と表示されます。

図31 プロパティ・インスペクタでスタイルを編集
図31 プロパティ・インスペクタでスタイルを編集

テーブルのバインド

この節では、DEPARTMENTS表から取得したデータを表示するテーブルを追加します。

図32 この節で作業する部分
図32 この節で作業する部分

この節の手順を実行すると、JSFページは次のように表示されます。

図33 この節の手順の実行結果
図33 この節の手順の実行結果

パネル・コレクションの追加

最初に、「 パネルの追加」で追加したスプリッタ区切りパネル(af:panelSplitterタグ)の上部にテーブルを配置するためのパネル・コレクションを追加します。コンポーネント・パレット上部のドロップダウン・リストで[ADF Faces]を選択し、[Layout]パネルに表示されている[パネル・コレクション]を図34のようにエディタ・ウィンドウにドラッグ&ドロップします。

図34 [パネル・コレクション]をエディタ・ウィンドウにドラッグ&ドロップ
図34 [パネル・コレクション]をエディタ・ウィンドウにドラッグ&ドロップ

[パネル・コレクション]をエディタ・ウィンドウにドロップすると、af:panelSpliterタグのfirstファセットにaf:panelCollectionタグが追加されます。

図35 af:panelCollectionタグが追加された直後の構造ウィンドウ
図35 af:panelCollectionタグが追加された直後の構造ウィンドウ

プロパティ・インスペクタでは、追加されたaf:panelCollectionタグの属性の値を編集できるようになっています。プロパティ・インスペクタの[Common]カテゴリを開き、[Id]に「deptPanel」と入力します(ここで指定した[Id]の値は、後に出てくる グラフのバインドで使用します)。

図36 プロパティ・インスペクタで[Id]の値を編集
図36 プロパティ・インスペクタで[Id]の値を編集

部門データを表示するテーブルの追加

ここでは、DEPARTMENTS表のデータを表示するテーブルをパネル・コレクション(af:panelCollectionタグ)内に配置します。ADF Modelによるデータ・バインドを使用する場合、アプリケーション・ナビゲータの[データ・コントロール]パネルから、ユーザー・インタフェースで表示または編集するデータ項目をエディタ・ウィンドウにドラッグ&ドロップするだけです。
まず、アプリケーション・ナビゲータの[データ・コントロール]バーをクリックして、パネルを開き、[DepartmentsView1]をエディタ・ウィンドウに表示されているパネル・コレクションの内部にドラッグ&ドロップします(図37)。

図37 [DepartmentsView1]をドラッグ&ドロップ
図37 [DepartmentsView1]をドラッグ&ドロップ

[DepartmentsView1]をエディタにドロップすると、[表の列の編集]ダイアログが表示されます。画面上部に表示されている[行選択]、[ソート] 、[フィルタリング]の3つをすべてチェックしてから[OK]ボタンをクリックします。

図38 [表の列の編集]ダイアログ
図38 [表の列の編集]ダイアログ

[表の列の編集]ダイアログの[OK]ボタンをクリックすると、実行時にエラーが発生した場合にそのメッセージを表示するためのaf:messagesタグと、ビュー・オブジェクトによって取得したデータをテーブル形式で表示するaf:tableタグが追加されます。

図39 [DepartementsView1]をドロップした直後のエディタ・ウィンドウ
図39 [DepartementsView1]をドロップした直後のエディタ・ウィンドウ

これにより、ADF Bindingsのためのページ定義ファイル(indexPageDef.xml)が生成されます。エディタ・ウィンドウの下部の[Bindings]タブをクリックすると、ページ定義ファイルに記述されたデータ・バインドの情報がビジュアルに表示されます。

図40 エディタ・ウィンドウの[Bindings]タブをクリックした状態
図40 エディタ・ウィンドウの[Bindings]タブをクリックした状態

次に、追加されたaf:tableタグの属性値を編集します。プロパティ・インスペクタで[Common]カテゴリを開き、[Id]に「deptTable」と入力します。

図41 プロパティ・インスペクタで[Id]の値を編集
図41 プロパティ・インスペクタで[Id]の値を編集

この状態でindex.jspxを実行すると、Webブラウザには図42のように表示されます。

図42 実行画面
図42 実行画面

NOTE
af:panelSpliterタグには、firstとsecondの2つのファセットが定義されています。この段階ではまだsecondファセットは空の状態なので、スプリッタは表示されません。

テーブル・データのフィルタリング

index.jspxを実行すると、各列の上部にテキスト・フィールドが表示され、データのフィルタリングが可能になります。例えば、DepartmentsId列のフィルタに「>=100」と入力し[Enter]キーを押すと、DepartmentsIdが100以上の部門のデータのみが表示されます。

図43 フィルタリングされた状態
図43 フィルタリングされた状態

このようにフィルタリングの機能を有効にするには、af:tableタグのfilterModelおよびqueryListener属性の値を指定する必要があります。ADF BCによるデータベース・アクセス・コンポーネントを使用した場合は、自動的に設定されます。
ADF BCを使用しないアプリケーションの場合は、次のような実装が必要です。

  • filterModel属性
    フィルタリングを実行するための問合せ条件の情報を格納するためのFilterableQueryDescriptorを拡張したJavaクラスを実装し、そのインスタンスを指定
  • queryListener属性
    ユーザーが入力したフィルタリングの条件がサーバーに送信された際に発生するイベントQueryEventのリスナー・メソッドを指定

コントロール・ヒントの指定

第4章「テーブルを使用したアプリケーションの作成」の「 列の書式のカスタマイズ」でも説明したとおり、列ヘッダーのテキストはaf:columntタグのheaderText属性で指定します。ADF Modelによるデータ・バインドを使用した場合、headerText属性の値には自動的にJSF EL式が設定されます。例えば、DepartmentsIdを表示するaf:columnタグのheaderText属性は次のように設定されています。

#{bindings.DepartmentsView1.hints.DepartmentId.label}

このJSF EL式はADF BCのエンティティ・オブジェクトまたはビュー・オブジェクトに定義されたコントロール・ヒントの値を取得しています。
それでは、コントロール・ヒントを使用して列ヘッダーのテキストを変更してみましょう。
アプリケーション・ナビゲータでModelプロジェクトの[Departments]をダブルクリックすると、エンティティ・オブジェクトDepartmentsが概要モード([Overview]タブが選択された状態)でエディタ・ウィンドウに表示されます。
[属性]タブ・ページには、エンティティ・オブジェクトに定義された属性が表示されているので、テーブルで[DepartmentsId]を選択した状態で鉛筆型のアイコン([選択した属性の編集])をクリックします。

図44 エンティティ・オブジェクトDepartmentsの編集
図44 エンティティ・オブジェクトDepartmentsの編集

これにより、[属性の編集]ウィンドウが起動されるので、画面右のツリーから[コントロール・ヒント]をクリックし、[ラベル・テキスト]に「部門ID」と入力します。

図45 ラベル・テキストの編集
図45 ラベル・テキストの編集

同様に、他の3つのエンティティ属性のラベル・テキストを表3のように指定します。

表3 ラベル・テキストに指定する値
エンティティ属性 ラベル・テキスト
DepartmentName 部門名
ManagedrId マネージャ
LocationId 所在地

index.jspxを実行すると、Webブラウザには図46のように表示されます。

図46 実行画面
図46 実行画面

グラフのバインド

この節では、ADF Data Visualization ComponentsのADF Faces Graphを使用して、選択された部門に所属する従業員の給与データを表示する棒グラフを追加します。

図47 この節で作業する部分
図47 この節で作業する部分

この節の手順を実行すると、JSFページは次のように表示されます。

図48 この節の手順の実行結果
図48 この節の手順の実行結果

パネル・グループ・レイアウトの追加

この項では、この後追加する棒グラフを配置するためのパネル・グループ・レイアウトを追加します。コンポーネント・パレット上部のドロップダウン・リストで[ADF Faces]を選択し、[Layout]パネルに表示されている[パネル・グループ・レイアウト]を図49のようにエディタ・ウィンドウにドラッグ&ドロップします。

図49 [パネル・グループ・レイアウト]をエディタ・ウィンドウにドラッグ&ドロップ
図49 [パネル・グループ・レイアウト]をエディタ・ウィンドウにドラッグ&ドロップ

[パネル・グループ・レイアウト]をエディタ・ウィンドウにドロップすると、af:panelSplitterタグのsecondファセット内に af:panelGroupが追加されたら、プロパティ・インスペクタで[Common]カテゴリを開き、[Layout]で「scroll」を選択します。これにより、パネルですべてを表示できない場合に、スクロール・バーが表示されるようになります。

図50 プロパティ・インスペクタで[Layout]の値を変更
図50 プロパティ・インスペクタで[Layout]の値を変更

グラフの追加と設定

この項では、テーブルで選択されている部門に所属する従業員の給与データを示す棒グラフを追加します。「 テーブルのバインド」と同様に、[データ・コントロール]パネルに表示されるデータ項目をドラッグ&ドロップするだけで棒グラフの追加が可能です。

棒グラフの追加

棒グラフを追加するために、アプリケーション・ナビゲータの[データ・コントロール]パネルから、[EmployeeView2]を図51のようにスプリッタの下の領域にドラッグ&ドロップし、コンテキスト・メニューから[Graphs]選択します。これにより、[コンポーネント・ギャラリ]ウィンドウが表示されるので、[カテゴリ]から[Bar]を、[Graph Types]から[Bar]を、[Quick Start Layouts]で一番左のレイアウトを選択します(図51)。

図51 コンテキスト・メニューから[Bar]を選択
図51 [コンポーネント・ギャラリ]ウィンドウ

これにより、[Create Graph Binding]ダイアログが表示されます。ダイアログの左部にある[Available]リストから[Salary]を[Bars]に、[EmplyeeId]を[X Axis]にドラッグ&ドロップします。[Attribute Labels]テーブルの[Attribute]行に[EmployeeId]と表示されている行の[Label]のセルをクリックすると、ドロップダウン・リストが表示されるので、[FirstName]を選択します。

図52 [Create Graph Binding]ダイアログ
図52 [Create Graph Binding]ダイアログ

[Create Graph Binding]ダイアログの[Preview]タブをクリックすると、追加されるグラフをプレビューすることができます。

図53 [Create Graph Binding]ダイアログの[Preview]タブ・ページ
図53 [Create Graph Binding]ダイアログの[Preview]タブ・ページ

[Create Graph Binding]ダイアログで[OK]ボタンをクリックすると、index.jspxにdvt:barGraphタグが追加されます。

部分ページ・レンダリングの設定

index.jspxにdvt:barGraphタグを追加したら、テーブルで選択された行データと連動してグラフの表示が切り替わるように部分ページ・レンダリングの設定をします。
構造ウィンドウまたはエディタ・ウィンドウで、追加されたdvt:barGraphタグを選択した状態で、プロパティ・インスペクタを開きます。プロパティ・インスペクタの[Behavior]カテゴリの[PartialTriggers]の右にある[▼]アイコンをクリックして、メニューから[編集]を選択します。

図54 [Partial Triggers]の[編集]メニューを選択
図54 [Partial Triggers]の[編集]メニューを選択

これにより、[プロパティの編集]ダイアログが表示されます。[使用可能]ツリーで[table – deptTable]を選択した状態で、画面中央の[>]をクリックします。

図55 [プロパティの編集]ダイアログ
図55 [プロパティの編集]ダイアログ

画面右の[選択済]リストに「table – deptTable」が表示されていることを確認したら、[OK]ボタンをクリックします。

NOTE
図55のように選択できない場合は、af:panelCollectionタグおよびaf:tableタグのid属性が正しく指定されていない可能性があります。それぞれのタグのid属性値を指定する方法は「 パネルの追加」で説明しています。

index.jspxを実行すると、スプリッタの下の領域に従業員の給与を示す棒グラフが表示されます。テーブルで選択されている部門データに応じて、棒グラフの表示が切り替わります。

図56 実行画面
図56 実行画面

ADF Data Visualization Toolが提供する各種グラフは、FlashやPNG、SVGなどフォーマットを選択することができます。デフォルトの設定では、WebブラウザにFlash Playerがインストールされている場合はFlashが使用され、それ以外の場合はPNGが使用されます。
グラフがFlashで描画されている場合、グラフにマウスポインタを合わせると、そのデータの詳細な数値が表示されます。

縦軸の設定

この項では、縦軸に表示される数値の書式を変更します。

図57 書式の変更
図57 書式の変更

グラフの縦軸の設定は、dvt:barGraphタグの中にdvt:y1Axisタグを記述して定義します。構造ウィンドウで[dvt:barGraph]を右クリックし、コンテキスト・メニューから[dvt:barGraphの中に挿入]→[ADF Data Visualization]を選択します。

図58 コンテキスト・メニューから[ADF Data Visualization]を選択
図58 コンテキスト・メニューから[ADF Data Visualization]を選択

これにより、[ADF Data Visualization]ダイアログが表示されるので、[Y1 Axis]を選択して[OK]ボタンをクリックします。

図59 [ADF Data Visualizationアイテムの挿入]ダイアログ
図59 [ADF Data Visualizationアイテムの挿入]ダイアログ

[ADF Data Visualizationアイテムの挿入]ダイアログで[OK]ボタンをクリックすると、dvt:barGraphタグ内にdvt:y1Axisタグが追加されます。縦軸に表示される数値の書式を指定するには、さらにdvt:y1Axisタグ内にdvt:numberFormatタグを追加する必要があります。
dvt:numberFormatタグを追加するには、構造ウィンドウで[dvt:y1Axis]を右クリックし、コンテキスト・メニューから[dvt:y1Axixの中に挿入]→[Number Format]を選択します。

図60 コンテキスト・メニューから[Number Format]を選択
図60 コンテキスト・メニューから[Number Format]を選択

これにより、dvt:y1Axisタグ内にdvt:numberFormatタグが追加され、プロパティ・インスペクタで属性値を編集できるようになっています。プロパティ・インスペクタで表4の3つを編集します。

表4 プロパティ・インスペクタで編集する項目と値
入力する項目 入力する値
NumberType NUMTYPE_CURRENCY
CurrencySymbol $
ScaleFactor SCALEFACTOR_NONE

図61 プロパティ・インスペクタで書式を設定
図61 プロパティ・インスペクタで書式を設定

index.jspxを実行するとWebブラウザには図62のように表示されます。

図62 実行画面
図62 実行画面

まとめ

この章では、ADF Modelが提供するデータ・バインドの仕組みを使用したアプリケーションの開発方法について、チュートリアル形式で説明しました。ADF Modelを使用すると一般的なJSFアプリケーションに比べて、少ないJavaコーディングでアプリケーション開発が可能になります。

Copyright © 2009, Oracle Corporation Japan. All rights reserved.
無断転載を禁ず

この文書はあくまでも参考資料であり、掲載されている情報は予告なしに変更されることがあります。日本オラクル社は本書の内容に関していかなる保証もいたしません。また、本書の内容に関連したいかなる損害についても責任を負いかねます。

Oracleは米国Oracle Corporationの登録商標です。文中に参照されている各製品名及びサービス名は米国Oracle Corporationの商標または登録商標です。その他の製品名及びサービス名はそれぞれの所有者の商標または登録商標の可能性があります。

智野 潤子 智野 潤子 (ちの じゅんこ)
日本オラクルで主に開発ツール/フレームワーク製品を担当しています。