パート3:ユーザー・インタフェースの強化

通常、Webアプリケーションには複数のページが含まれています。 チュートリアルのこのパートでは、アプリケーションに別のページ(検索ページ)を追加し、Oracle ADFタスク・フロー・ダイアグラマを使用して、2ページ間のナビゲーション規則を定義します。続いてOracle ADF Facesフレームワークの機能を使用して、ページに付加機能を追加します。最後に、再利用可能なページ断片を作成して、DeptEmpPageページに追加します。

ここに示しているのは、アプリケーションの検索ページです。JobIdという値のリストがあり、SalaryとAnnualSalaryのフィールド間に関係があります。ここでは、給与の値を調整し、JobIdにオートサジェスト動作を追加する方法を確認します。

検索ページのスクリーンショット。

ステップ1:ページ・フローの作成
  1. アプリケーションウィンドウのViewControllerプロジェクトで、Page Flowsノードの下にあるadfc-configファイルを見つけます。このファイルをダブルクリックして、エディタで開きます。このファイルにアプリケーションのナビゲーションを定義します。

    アプリケーション・ナビゲータでadfc-configを選択。
  2. DeptEmpPage.jsf」ファイルをアプリケーション・ナビゲータから空白のadfc-configダイアグラムにドラッグします。

    スクリーンショットの左側のアプリケーション・ナビゲータでDeptEmpPageを選択、右側のタスク・フロー・ダイアグラムにDeptEmpPageが表示。
  3. コンポーネント・パレットから「View」アクティビティをドラッグして、adfc-configダイアグラムにドロップします。名前をqueryに変更します。これが、今から作成しようとしている新しいJSFページです。

    タスク・フロー・ダイアグラムに2つのビュー、DeptEmpPageとqueryが表示。
  4. コンポーネント・パレットから「Control Flow Case」を選択し、「DeptEmpPage」をクリックします。次に「query」ページをクリックします。

    タスク・フロー・ダイアグラムで、2つのビューがコントロール・フロー・ケース線で結合。

    この線にgoQueryと名前をつけます。

    コントロール・フロー・ケース線にgoQueryという名前が表示。
  5. コンポーネント・パレットから別の「Control Flow Case」を選択して、queryページからDeptEmpPageに、先ほどとは逆のフローを作成します。このフローにはbackと名前をつけます。

    backというラベルが表示された2本目のコントロール・フロー・ケースが追加。
  6. ダイアグラムの「query」アクティビティをダブルクリックして、新しいページを作成します。Create JSF Pageダイアログで、デフォルトのFaceletsラジオ・ボタンはそのままにして、「Quick Start Layout」ラジオ・ボタンをクリックします。

    デフォルトの「One ColumnCategoryTypeLayoutを選択して、「OK」をクリックします。

    queryページのCreate JSF PageダイアログでBrowseボタンにカーソルを置く。
  7. このページに従業員検索機能を追加するには、Data Controlsアコーディオンを開いてEmpDetails1を見つけます(表示されない場合は「Refresh」ボタンをクリックします)。

    Data ControlsアコーディオンのEmpDetails1を選択。

  8. EmpDetails1」データ・コントロールを展開し、その下にある「Named Criteria」ノードを展開します。「All Queriable Attributes」を選択して新しいquery.jsfページにドラッグします。「Query」→「ADF Query Panel」と選択して作成します。

    アプリケーション・ナビゲータでData ControlsアコーディオンのAll Queriable Attributesを選択。 右側の空のページ、CreateボックスでQuery → ADF Query Panelを選択。
  9. Data Controlsアコーディオンで、「EmpDetails1」データ・コントロールを選択し、ページのcenter領域にあるqueryコンポーネントの下にドラッグします。ADF Form...として作成します。

    アプリケーション・ナビゲータのData ControlsアコーディオンでEmpDetails1を選択。 右側のEmployeesページにSearchパネルが表示、その下のCreateボックスでForm → ADF Formを選択。

    Edit Forms Detailsで、「Row Navigation」と「Submit Button」のチェック・ボックスを両方とも選択します。「OK」をクリックします。

    Create FormダイアログでRow NavigationとSubmitのチェック・ボックスを選択、OKボタンにカーソルを置く。
  10. panelFormLayout」を選択したまま、プロパティ・インスペクタで、Rowsプロパティを5に設定します。

    また、Short Descプロパティをsalary graphに設定します。

    SearchページでpanelFormLayoutが選択、右側のプロパティ・インスペクタでRowsプロパティの値5がハイライト表示。
  11. Structureウィンドウで「Submit」ボタンを見つけて右クリックし、「Insert After Button」→「Button」を選択します。

    Structureウィンドウでコンテキスト・メニューからSubmit → Insert After Button → Buttonメニューを選択。
  12. プロパティ・インスペクタで、新しいボタンのTextBackに変更し、Actionプロパティにはドロップダウン・リストから「back」を選択します。これによって、ボタンをクリックすると、ページ・フロー・ダイアグラムで定義したナビゲーションが実行されます。

    プロパティ・インスペクタのButtonプロパティで、Actionプロパティのドロップダウンからbackを選択。
  13. 次に、トランザクション操作をページに追加して、変更をコミットおよびロールバックできるようにします。Data Controlsペインで、アプリケーション・モジュール・レベルの「Operations」ノードを展開して、Commit操作とRollback操作を見つけます。「Commit」操作をStructureウィンドウのFirst Buttonの前にドラッグします。ドロップ・ターゲットを要求されたら、「ADF Button」を選択します。

    Data ControlsアコーディオンでCommit操作を選択。その下のStructureウィンドウで、Firstコマンド・ボタンの上にカーソルを置く。


  14. Rollback操作に対しても、同じステップを繰り返します。

    Data ControlsアコーディオンでRollback操作を選択。その下のStructureウィンドウで、Firstコマンド・ボタンの上にカーソルを置く。
  15. プロパティウィンドウで、RollbackボタンおよびCommitボタンのDisabledプロパティをdefaultにリセットし、両方のボタンが常に選択可能になるようにします。

    プロパティ・フィールドの末尾にマウスを合わせると、水色の歯車アイコンが表示されます。この操作を行うには、この歯車アイコンをクリックします。

    プロパティ・インスペクタでDisabledプロパティのドロップダウン・リストからReset to Defaultオプションを選択。

    プロパティ・インスペクタでDisabledプロパティのドロップダウン・リストからReset to Defaultオプションを選択。
  16. query.jsf」タブをダブルクリックして、設計エディタのページを最大化します。ページは以下のようになります。

    queryページ。
  17. query.jsf」タブをもう一度ダブルクリックして、通常のサイズに戻します。

  18. DeptEmpPage.jsf」タブをクリックしてページに戻ります。このファイルや他の任意のファイルに素早くナビゲートするには、JDeveloperの右上にあるGlobal Findボックスにファイル名を入力します。

    ページ右上の検索ボックスにdeptと入力。ウィンドウには検索操作の結果が表示、DeptEmpPageが選択。

    それからファイル名をクリックして、エディタで開きます。

  19. ページのDesignで、「Departments」アコーディオンを展開します。コンポーネント・パレットから、「Button」コンポーネントを選択して、ページのDepartmentsアコーディオンにあるFirstボタンとPreviousボタンの間にドラッグします。または、「First」ボタンを右クリックし、「insert after > button」を選択して、新しいボタンを追加できます。

    コンポーネント・パレットでButtonコンポーネントを選択、カーソルを使用してDepartmentsページ(左側)にドラッグ。
  20. プロパティウィンドウを使用して、ボタンのTextQueryに変更し、ActionプロパティにgoQueryと入力するか、使用可能なドロップダウン・リストから「goQuery」を選択します。これによって、ボタンをクリックすると、ページ・フロー・ダイアグラムで定義したナビゲーションが実行されます。

    プロパティ・インスペクタでTextプロパティにQueryと入力、Actionプロパティの右にあるドロップダウン・リストからgoQueryオプションを選択。
  21. JDeveloperメニュー・バーの「JDeveloperメイン・ツールバーのSave AllアイコンSave Allアイコンをクリックして作業内容を保存し、「DeptEmpPage.jsf」ページを右クリックして「Run」を選択します。

    アプリケーション・ナビゲータでDeptEmpPageを選択、コンテキスト・メニューからRunを選択。
  22. ブラウザでページが表示されたら、「Query」ボタンをクリックして、新しいページに移動します。Searchページで「Advanced」をクリックして、詳細な検索条件を表示します。

    ブラウザのページ実行時ビュー。カーソルをAdvancedボタンに置く。
  23. FirstNameフィールドはデフォルトのStarts withにしたまま、文字Gを入力します。

    Search」をクリックします。下のフォームにGuy Himuroのレコードが表示されます。

    FirstName検索フィールドにGを入力、Searchボタンにカーソルを置く。
  24. このフォームを使用して、検索条件の保存、さらに複雑な問合せの作成、および従業員のデータの更新を試します。作成したビュー・オブジェクトの定義(部門名のデータやJobIdの値のリスト、従業員の年間給与など)と一致するデータのビューが、このフォームにどのように表示されるか確認してください。
    データを変更し、必要に応じてトランザクションをコミットしたりロールバックしたりすることもできます。

    終了したら、ブラウザ・ウィンドウを閉じます

ステップ2:部分ページ・リフレッシュの使用

次の手順では、ADF Facesフレームワーク機能の一部について理解を深めます。Oracle ADF Facesコンポーネントの持つ宣言的な開発機能を活用し、Ajaxの他の機能を使用してページを機能強化します。

    以降の手順では、Oracle ADF Facesが備える部分ページ・リフレッシュ機能を使用します。Salaryフィールドが更新されたときにAnnual Salaryが再計算されるようにします。また、更新時にページ全体をリフレッシュする必要はないため、変更されたフィールドだけをリフレッシュします。この動作を実現するために、Oracle ADF Facesの部分ページ・レンダリング(PPR)機能を使用します。
  1. query.jsfファイルがまだ開いていない場合は、設計エディタで開きます。「Salary」フィールドを選択します。プロパティ・インスペクタで、Idプロパティの値をsalに設定します。

    queryページでSalaryフィールドを選択。右側のプロパティ・インスペクタで、Idプロパティにsalを設定。
  2. さらに、プロパティ・インスペクタの「Behavior」ノードを展開し、AutoSubmitプロパティをTrueに設定します。

    プロパティ・インスペクタでAutoSubmitプロパティをtrueに設定。
  3. 設計エディタまたはStructureウィンドウで、AnnualSalaryフィールドを見つけます。BehaviorセクションでPartialTriggersプロパティを見つけて、右側の歯車アイコンをクリックし、「Edit」を選択します。

    StructureウィンドウでAnnualSalaryフィールドを選択。右側のプロパティ・インスペクタで、PartialTriggersプロパティのドロップダウン・リストでEditオプションを選択。
  4. Edit Propertyダイアログで、Salaryフィールドを見つけ、青い矢印を使用して右に移動します。「OK」をクリックします。

    Edit Property: Partial Triggersダイアログ。inputText -salを選択、右向きの矢印にカーソルを置く。
  5. JDeveloperメニュー・バーの「JDeveloperメイン・ツールバーのSave AllアイコンSave Allアイコンをクリックして作業内容を保存し、DeptEmpPage.jsf実行します。

    アプリケーション・ナビゲータでDeptEmpPage.jsfを選択、コンテキスト・メニューのRunにカーソルを置く。
  6. ページが表示されたら、Departmentsパネルの「Query」ボタンをクリックします。

    Departmentsページの実行時ビュー、Queryボタンにカーソルを置く。
  7. Searchページで、名前がA%で始まる従業員を検索します。

    SearchページでFirstNameフィールドにA%を入力、Searchボタンにカーソルを置く。

    SalaryとAnnual Salaryの値に注目します。

    SearchページにAlexander Khooのレコードが表示。
  8. Salaryフィールドを更新して、別のフィールドにタブで移動します。 Salaryフィールドを離れると、AnnualSalaryフィールドがすぐに変更されることを確認します。ただし、リフレッシュされるのはこのフィールドのみで、ページ全体はリフレッシュされません。

    Salaryを更新したAlexander Khooのレコード。Salaryフィールドからカーソルを移動したため、AnnualSalaryも更新。
  9. ブラウザを閉じます。

ステップ3:ADF AutoSuggest Behaviorの使用
af:autoSuggestBehaviorコンポーネントは、ユーザーが入力コンポーネントに入力するときに、候補を提示するドロップダウン・リストを表示します。オートサジェスト機能を宣言的な方法で使用するには、モデル・プロジェクトにモデル駆動型の値リストが存在する必要があります。suggestedItemsリストはこのリストに基づいて表示されます。すでにJobIdフィールドに値リストを追加してあるため、この例ではこのフィールドを使用します。

  1. queryページで「JobId」フィールドを選択します。

    QueryページでJobIdフィールドを選択。
  2. コンポーネント・パレットで「Operations」ノードを展開し、BehaviorセクションでAuto Suggest Behaviorを見つけます。「Auto Suggest Behavior」操作をJobIdフィールド上にドラッグ・アンド・ドロップします。

    queryページの右側にコンポーネント・パレットが表示、Auto Suggest Behavior操作を選択、カーソルを使用してJobIdフィールドにドロップ。
  3. Structureウィンドウで「af:autoSuggestBeahvior」コンポーネントを選択します。プロパティ・インスペクタで、SuggestedItemsプロパティの値を#{bindings.JobId.suggestedItems}に設定します。値を直接入力するか、プロパティの横にある歯車アイコンをクリックしてMethod Expression Builderを使用できます。

    Auto Suggest BehaviorダイアログでSuggestedItemsフィールドに入力したバインド文字列がハイライト表示。
  4. 作業内容を保存し、queryページを実行します。

    アプリケーション・ナビゲータでqueryページを選択、コンテキスト・メニューのRunがハイライト表示。
  5. EmployeeIdフィールドに121と入力し、「Search」ボタンをクリックします。Adam Frippのレコードで、JobIdフィールドに's'と入力して更新します。's'で始まるいくつかの役職名が候補として表示されます。

    SearchページでEmployeeIdフィールドに121と入力、結果フィールドにAdam Frippのレコードが表示。 JobIdフィールドに文字's'を入力、文字's'で始まる役職名のリストが表示。
  6. 's'の後に'a'を追加し、候補リストが変更されることを確認します。

    SearchページのJobIdフィールドで's'の後に文字'a'を入力。 リストには'sa'で始まる3つのエントリが表示。
  7. 残っている選択肢から「Sales Representative」を選択し、フィールドに設定します。

    SearchページでSales Representativeを選択。
  8. 変更内容を保存せずにブラウザを閉じます。

ステップ4:ドロップダウン・メニューと操作コンポーネントの使用

このステップでは、ページにドロップダウン・メニューを追加し、Oracle ADF Faces操作コンポーネントをいくつか使用して、ページにJavaScriptベースの操作を追加します。追加するのは、表データをExcelスプレッドシートにエクスポートしたり、印刷可能なページを作成したりするコンポーネントです。

  1. DeptEmpPage.jsfファイルで、Employees表を囲むパネル・コレクションのmenusファセット内をクリックします。右クリックしてコンテキスト・メニューを表示し、「Insert Inside f:facet - menus」→「Menu」を選択します。

    DeptEmpPageの上部でmenusファセットを選択、コンテキスト・メニューのInsert Inside f:facet」を選択。
  2. プロパティ・インスペクタで、TextプロパティをMy Optionsに設定します。

    プロパティ・インスペクタでメニューのTextプロパティを'My Options'に設定。
  3. プロパティウィンドウの「Behavior」ノードを展開し、Detachableプロパティをtrueに設定します。

    プロパティ・インスペクタのMenuでDetachableプロパティを'true'に設定。
  4. Structureウィンドウでメニュー・コンポーネントを右クリックし、「Insert Inside Menu」→「Menu Item」を選択します。

    Structureウィンドウでメニューを選択、コンテキスト・メニューからInsert Inside Menu → Menu Itemを選択。
  5. プロパティウィンドウで、新しいメニュー項目のTextプロパティをExport to Excelに設定します。

    プロパティ・インスペクタでメニュー項目のTextプロパティをExport to Excelに設定。
  6. 新しいメニュー項目Export to ExcelをStructureウィンドウで選択した状態で、コンポーネント・パレットのADF FacesコンポーネントのOperationsノードに含まれる「Listeners」セクションを展開します。
    Export Collection Action Listener」コンポーネントを見つけて、Structureウィンドウのメニュー・オプションExport to Excelにドラッグします。

    Structureウィンドウとプロパティ・インスペクタを並べて表示、Export CollectionAction Listenerをメニュー項目Export to Excelの上にドラッグ。
  7. Insert Export Collection Action Listenerダイアログで、ExportedIdフィールドの横にある歯車アイコンをクリックし、「Edit」を選択します。

    Insert Export Collection Action Listenerダイアログでドロップダウン・メニューからEditオプションを選択。
  8. Edit Propertyダイアログでページの構造をナビゲートして、「table - t1」コンポーネントを見つけて選択します。「OK」をクリックします。

    Edit Property:ExportedIdダイアログでtable - t1を選択、カーソルをOKに置く。
  9. Typeドロップダウン・リストから「excelHTML」を選択して「OK」をクリックします。

    Insert Export Collection Action ListenerダイアログでTypeフィールドにexcelHTMLがハイライト表示、カーソルをOKに置く。
  10. メニューにメニュー・オプションをもう1つ追加します。Structureウィンドウでメニュー・コンポーネント「Export to Excel」を右クリックし、コンテキスト・メニューから「Insert After Menu Item」→「Menu Item」を選択します。

    Structureウィンドウでメニュー項目を選択、コンテキスト・メニューからInsert After Menu Item → Menu Itemを選択。
  11. 新しいメニュー・オプションのTextプロパティをPrintable Pageに設定します。

    メニュー項目のプロパティ・インスペクタで、TextフィールドにPrintable Pageがハイライト表示。
  12. コンポーネント・パレットのOperationsノードの下にあるBehaviorセクションで、「Show Printable Page Behavior」操作を選択して、新しいメニュー項目に追加します。作成した新しいメニュー・オプションに、「Show Printable Page Behavior」をドラッグ・アンド・ドロップします。

    Structureウィンドウとコンポーネント・パレットを並べて表示、Show Printable Page Behavior操作をメニュー項目Printable Pageにドラッグ。
  13. JDeveloperメニュー・バーの「JDeveloperメイン・ツールバーのSave Allアイコン。Save Allアイコンをクリックして作業内容を保存し、そのページで実行します。

  14. ページが表示されたら、新しい "My Options" メニューをクリックして分離します。

    x」をクリックしてメニューを閉じます。

    DeptEmpPageの実行時ビュー、カーソルを使用してMy Optionsメニューをページ上の新しい場所に移動。
  15. 次に、作成したメニュー・オプション(Export to Excelなど)を1つ1つ起動します。

    My OptionsメニューでExport to Excelメニュー・オプションを選択

    Excelファイルにアクセスするには、ブラウザ・ウィンドウのファイルのダウンロードを受け入れる必要があります。ダウンロードしたファイルは、デフォルトの'ダウンロード'ディレクトリに格納されます。

    DeptEmpPageページの上部にInternet Explorerのメッセージが表示、メニュー・オプションからDownload Fileオプションが選択。
  16. Printable Pageメニュー・オプションを試します。

    My OptionsメニューからPrintable Pageメニュー・オプションを選択。

    これで、ページを印刷できます。

    ページのPrintビュー。

    ブラウザ・ウィンドウを閉じます。

ステップ5:ページへのCRUD操作コンポーネントの追加
この後のいくつかのタスクでは、JDeveloperを使用していくつかのデータ操作をビュー・オブジェクトで使用できるようにし、それらの操作を試します。このステップでは、Delete操作とCreateInsert操作の追加方法を説明します。 ユーザーが新しい行を挿入しようとしてCreateInsertボタンをクリックしたら、表がリフレッシュされて新しい空の行が表示される必要があります。そのために、このチュートリアルの本パートのステップ2で使用した部分ページ・リフレッシュ機能をここでも使用します。このビュー・オブジェクトでは、バインド変数を使用して従業員の電子メールを問合せに渡します。
  1. query.jsf」タブをクリックしてqueryページに戻り、Structureペインを開きます。Data Controlsアコーディオンで「EmpDetails1」ノードを展開し、その下にある「Operations」ノードを展開します。「CreateInsert」操作を選択します。

    Data ControlsアコーディオンでEmpDetails1ノードとOperationsノードを展開。 CreateInsert操作を選択。
  2. CreateInsert」操作を、Structureペインのemployeesフォームのフッター・ファセット、af:panelGroupLayout - horizontalにドラッグします。ADF Buttonとして作成します。ヒント:「af:panelFormlayout -5」→「Panel Form Layout facets」→「af:panelGroupLayout - vertical」→「af:panelGroupLayout - horizontal」を展開します。

    Data Controlsアコーディオン、下にStructureウィンドウ。 CreateInsert操作をqueryページのフッター・ファセット、panelGroupLayoutにドラッグ。 CreateメニューでADF Buttonオプションが選択。
  3. プロパティウィンドウで、ボタンのIdプロパティをCreateInsertに設定します。

    ADF Buttonのプロパティ・インスペクタで、IdプロパティをCreateInsertに設定。
  4. さらに、プロパティ・インスペクタの「Behavior」ノードを展開し、PartialTriggersプロパティのドロップダウン・リストから「Edit」を選択します。

    ADF Buttonのプロパティ・インスペクタで、PartialTriggersプロパティのドロップダウン・ボックスが表示。 Editオプションを選択。
  5. Editウィンドウで、ページのコンポーネントを下にスクロールし、CreateInsertボタンを見つけます。ボタンをSelectedペインへ移動します。

    Edit Property: PartialTriggersダイアログ。CreateInsertコマンド・ボタンを選択、矢印にカーソルを合わせ、Selectedペインに移動。

    OK」をクリックします。この操作により、CreateInsertコンポーネントは、表をリフレッシュさせるトリガーとして定義されます。

  6. 同様に、EmpDetails1からページ・フッターのpanelGroupLayoutにDelete操作をドロップして、Delete操作を追加します。前回と同様、ADF Buttonとして作成し、一部のトリガーを設定します。

    Data Controlsアコーディオンで、EmpDetails1ノードとOperationsノードを展開、Delete操作を選択。
  7. 2つの新しいボタンは、queryページの下部に表示されます。

    queryページの設計時ビュー。2つの新しいボタンが右下に表示。
  8. 作業内容を保存し、queryページを実行します。

  9. ページが表示されたら、LastNameフィールドにF%と入力し、「Search」ボタンをクリックします。姓が "F" で始まる最初の従業員レコードが表示されます。

    queryページの実行時ビュー。LastNameフィールドにF%と入力、Searchボタンにカーソルを置く。Pat Fayの従業員レコードが表示。
  10. CreateInsert」ボタンをクリックします。ページがリフレッシュされ、フィールドが消去されて新しいレコードを挿入できる状態になります(ただし、HireDateフィールドはデフォルトで今日の日付に設定されるため、リフレッシュされません)。

    queryページの実行時ビュー。前と同様、LastNameフィールドにF%が入力。 カーソルはCreateInsertボタンに置く。Pat Fayのレコードがリフレッシュされてフィールドが空になり、新しいレコードを挿入可能。
  11. コミットせずにブラウザを閉じます。

ステップ6:パラメータに基づく問合せ専用のビジネス・サービスの作成
このステップでは、エンドユーザーが電子メール・アドレスを使用して、従業員名を検索できるようにするビュー・オブジェクトを作成します。ビュー・オブジェクトではバインド変数を使用して、従業員の電子メール・アドレスを問合せに渡します。
  1. アプリケーション・ナビゲータで、「demo.model」パッケージを見つけて右クリックし、「New」→「View Object...」を選択します。

    アプリケーション・ナビゲータでdemo.modelパッケージを選択、コンテキスト・メニューからNew → View Objectを選択。
  2. Create View Objectウィザードで、NameプロパティをEmpByEmailに設定し、データソースとして「Custom SQL Query」ラジオ・ボタンを選択します。「Next」をクリックします。

    CreateView Objectウィザードのステップ1。 NameフィールドでEmpByEmailがハイライト表示。 カーソルはNextボタンに置く。
  3. Create View Objectウィザードのステップ2で、次の問合せを入力します。

    select first_name, last_name from employees where email = :p_email

    p_emailの前の':'は、それが問合せに渡される変数であることを意味します。

    Test and Explain」ボタンをクリックして、問合せを検証します。

    ウィザードのステップ2の一部。Select文と、この文をテストした後のResultボックス。 Resultボックスに'Query executed successfully'と表示。

    Close」をクリックし、「Next」をクリックします。

  4. Create View Objectウィザードのステップ3で、「New」ボタンをクリックして、新しいバインド変数を定義します。Nameプロパティをp_emailに設定します。

    ウィザードのステップ3。Variable Nameボックスのバインド変数p_emailがハイライト表示。 Literalラジオ・ボタンが選択、Updatableチェック・ボックスにチェック。

    Control Hints」タブをクリックして、LabelのテキストをEmailに設定します。

    ウィザードのステップ3。Control Hintsタブを選択。 Labelテキスト・フィールドのEmailがハイライト表示。
  5. ウィザードのステップ8に到達するまで、「Next」を数回クリックして、すべてのデフォルトを受け入れます。

    Key Attributeの指定を要求されても、何も指定しないでください

    ここで、「Add to Application Module」チェック・ボックスにチェックを入れて、新しいビューをデータ・モデルに加えます。
    Finish」ボタンをクリックします。

    ウィザードのステップ8。Add to Application Moduleチェック・ボックスを選択。
  6. 作業内容を保存してからOracle ADF Model Testerを実行し、新しいビューをテストします。新しい「EmpByEmail1」ビューをダブルクリックし、変数に値を挿入するように指示されたらSKINGと入力して「OK」をクリックし、この電子メール・アドレスの結果を取得します(Oracle ADF Model Testerを実行するには、アプリケーション・モジュールを右クリックして「Run」を選択します)。

    Oracle ADF Model TesterでEmpByEmailを選択。Bind Variablesポップアップ・ウィンドウでValueフィールドのSKINGがハイライト表示。カーソルはOKボタン置く。


    OKをクリックした結果が表示。 FirstNameフィールドとLastNameフィールドに、以前に入力した電子メールの値が表示。
  7. テスターにはKingのみが表示されます。

  8. Oracle ADF Model Testerを閉じます

ステップ7:再利用可能なページ断片の作成

このステップでは、再利用可能なページ断片を作成します。作成後、前のステップで作成したビュー・オブジェクトをページ断片に組み込み、最後にDeptEmpPageページでページ断片を使用します。

  1. まず、このページ用の新しいタスク・フローを作成します。アプリケーション・ウィンドウで「ViewController」プロジェクトを右クリックし、「New」→「From Gallery」を選択します。

    アプリケーション・ナビゲータでViewControllerプロジェクトを選択、コンテキスト・メニューからNewメニュー・オプションを選択。
  2. Web TierJSF/Faceletsカテゴリで、「ADF Task Flow」を選択します。

    New GalleryのCategoriesペイン(左側)でJSF/Faceletsを選択、Itemsペイン(右側)でADF Task Flowを選択。

    OK」をクリックします。

  3. Create Task Flowダイアログで、File Nameプロパティをsearch-email-flow.xmlに設定します。
    Create as Bounded Task FlowCreate with Page Fragmentsの両方のチェック・ボックスが選択されていることを確認します。

    Create Task FlowダイアログでFile Nameボックスのsearch-email-flow.xmlがハイライト表示、Create as Bounded Task FlowとCreate with Page Fragmentsの両方のチェック・ボックスが選択。

    OK」をクリックします。

  4. 設計エディタで、「View」コンポーネントをコンポーネント・パレットから空のダイアグラムにドラッグして、searchEmailという名前を付けます。このフローで使用するのは1ページのみですが、複数ページを持つバウンド・タスク・フローを使用し、それらを他のJSFページに含めることもできます。

    タスク・フロー・ダイアグラムにビューを1つ追加。searchEmailという名前がハイライト表示。
  5. 新しい「searchEmail」ビュー・コンポーネントをダブルクリックして、ページ断片を作成します。
    表示されるダイアログですべてのデフォルトを受け入れて、ファイル名がsearchEmail.jsffであることを確認します。これにより、ページがページ断片として作成され、他のJSFページに含めることができます。「OK」をクリックします。

    Create ADF Page FragmentダイアログでFile NameフィールドのsearchEmail.jsffがハイライト表示。OKボタンにカーソルを置く。
  6. 設計エディタに空のページが表示されます。「Data Controls」アコーディオンを展開し、必要に応じて「Refresh」ボタンをクリックして、新しいEmpByEmail1データ・コントロールがリストに表示されることを確認します。

    Data ControlsアコーディオンでEmpByEmail1ノードを選択。
  7. 新しい「EmpByEmail1」ビューと、その下にある「Operations」ノードを展開します。「ExecuteWithParams」操作を選択します。この操作を使用して、このビューに対して必要なパラメータを渡して問合せを実行します。

    EmpByEmailノードとOperationsサブノードを展開。 ExecuteWithParams操作を選択。

  8. 新しいページに「ExecuteWithParams」操作をドラッグし、ADF Parameter Formとして作成します。

    アプリケーション・ナビゲータのData ControlsアコーディオンでExecuteWithParams操作を選択。searchemailページ断片にカーソル。CreateボックスのADF Parameter Formにカーソルを置く。
  9. Create Formダイアログで、p_email値の表示ラベルをデフォルトからEmailに変更します。「OK」をクリックします。

    Create Formダイアログでp_emailフィールドを選択、Display LabelフィールドをEmailに変更。
  10. このページの設計エディタで、「ExecuteWithParams」ボタンをクリックし、プロパティ・インスペクタを使用してTextプロパティをFind Detailsに変更します。

    設計エディタでsearchEmail.jsffを開き、ExecuteWithParamsボタンを選択。 プロパティ・インスペクタのTextプロパティがFind Detailsに設定。
  11. Data Controlsペインから、「EmpByEmail1」コレクションをボタンの下のページにドラッグします。ADF Formとして作成します。

    アプリケーション・ナビゲータのData ControlsアコーディオンでEmpByEmailを選択。 設計エディタで、ビューがADF Read-only Formとしてページ断片にドロップ。
  12. Read-Only Form」を選択し、Create Formダイアログに表示されるその他のデフォルト値を受け入れます。「OK」をクリックします。
    作業内容を保存します。

    Create FormダイアログでOKボタンにカーソルを置き、デフォルト値を受け入れ。

    ページは次のように表示されます。

    ページ断片の設計時ビュー。
  13. これで新しいバウンド・タスク・フローにページ断片が含まれるようになりました。次に、完成したバウンド・タスク・フローを他のJSFページに加えます。
    アプリケーション・ナビゲータで、DeptEmpPage.jsfファイルを見つけて、設計エディタで開きます(まだ開いていない場合)。コンポーネント・パレットのLayoutセクションから、「Separator」コンポーネントをドラッグして、DeptEmpPage.jsfページの左のアコーディオンにあるDepartmentsフォームの下にドロップします。

    コンポーネント・パレットでSeparatorコンポーネントを選択、カーソルを使用してDepartmentsページにドロップ。
  14. 作成した新しいフローをリージョンとして既存のページに追加します。
    アプリケーション・ナビゲータから、「search-email-flow.xml」ファイルをドラッグして、DeptEmpPage.jsfページの左のアコーディオンにある新しいセパレータの下にドロップします。Regionとして作成します。

    アプリケーション・ナビゲータでsearch-email-flowを選択、カーソルをDepartmentsページに置き、フローをリージョンとしてドロップ。
  15. これで、ページは次の画面のようになります。

    完成したページの設計時ビュー。
  16. 作業内容を保存し、更新したDeptEmpPage.jsfページを実行します。
    ブラウザにページが表示されたら、Emailフィールドに電子メールの値(SKING)を入力し、「Find Details」ボタンをクリックして、新しい機能をテストします。

    Departmentsページの実行時ビュー。EmailフィールドにSKINGと入力、Find Detailsボタンにカーソルを置く。
  17. 従業員名の情報が返されます。

    実行時ビューに送信した電子メールに対応するFirstNameとLastNameが表示。
  18. 終了したら、ブラウザを閉じます。

ステップ8:パネル・スプリングボードを使用したページの起動

このステップでは、パネル・スプリングボードをページの起動パッドとして使用します。ページとタスク・フローを作成したら、panelSpringboardコンポーネントを使用してこれらを組み合わせることができます。すべてのページは、バウンド・タスク・フロー内でページ断片としてパッケージ化し、リージョンとして追加する必要があります。それぞれのページまたはタスク・フローにはアイコンを関連付けることができます。また、アイコンが選択されたときの項目の動作を指定できます。

  1. 次の一連の手順の準備として、アプリケーションにいくつかのアイコンを追加します。次の3つの画像をそれぞれ右クリックして、アプリケーションの../public_htmlディレクトリに保存します。

    アプリケーション・ナビゲータでViewControllerプロジェクトを選択、コンテキスト・メニューからNewメニュー・オプションを選択。 アプリケーション・ナビゲータでViewControllerプロジェクトを選択、コンテキスト・メニューからNewメニュー・オプションを選択。 アプリケーション・ナビゲータでViewControllerプロジェクトを選択、コンテキスト・メニューからNewメニュー・オプションを選択。


    アプリケーション・ナビゲータでViewControllerプロジェクトを選択、コンテキスト・メニューからNewメニュー・オプションを選択。

  2. JDeveloperに戻り、「ViewController」プロジェクトを選択し、リフレッシュ・アイコンをクリックします。ドロップダウン・メニューで、「Refresh ViewController.jpr」を選択します。

    アプリケーション・ナビゲータでViewControllerプロジェクトを選択、コンテキスト・メニューからNewメニュー・オプションを選択。

    アプリケーション・ウィンドウに、先ほど追加した画像が表示されます。

    アプリケーション・ナビゲータでViewControllerプロジェクトを選択、コンテキスト・メニューからNewメニュー・オプションを選択。

  3. これで、スプリングボードのコンポーネントを作成できる状態になりました。

    最初に必要となる作業は、いくつかのページを作成し、それらをバウンド・タスク・フロー上にページ断片として配置することです。この作業には数種類の方法がありますが、そのうちの1つを説明します。

  4. View Controller」プロジェクトを右クリックし、コンテキスト・メニューで「New」→「Page...」を選択します。

    アプリケーション・ナビゲータでViewControllerプロジェクトを選択、コンテキスト・メニューからNewメニュー・オプションを選択。
  5. Departments.jsfという名前をつけ、空のページを使用してページを作成します。

    アプリケーション・ナビゲータでViewControllerプロジェクトを選択、コンテキスト・メニューからNewメニュー・オプションを選択。
  6. Data Controlsパレットで「AppModuleDataControl」を展開し、「DepartmentsView1」をページにドラッグ・アンド・ドロップします。
    ポップアップ・メニューで「Table/List View」→「ADF Table...」を選択します。

    アプリケーション・ナビゲータでViewControllerプロジェクトを選択、コンテキスト・メニューからNewメニュー・オプションを選択。
  7. Create Tableダイアログで、「OK」をクリックして、すべてのフィールドを受け入れます。

    アプリケーション・ナビゲータでViewControllerプロジェクトを選択、コンテキスト・メニューからNewメニュー・オプションを選択。
  8. 結果のページは次のようになります。作業内容を保存します。

    アプリケーション・ナビゲータでViewControllerプロジェクトを選択、コンテキスト・メニューからNewメニュー・オプションを選択。
  9. ViewController」プロジェクトを選択し、コンテキスト・メニューで「New」→「ADF Task Flow...」を選択します。

    アプリケーション・ナビゲータでViewControllerプロジェクトを選択、コンテキスト・メニューからNewメニュー・オプションを選択。
  10. depts-task-flow-definition.xmlという名前をつけ、「Create with Page Fragments」チェック・ボックスの選択を解除します。「OK」をクリックし、タスク・フローを作成します。

    アプリケーション・ナビゲータでViewControllerプロジェクトを選択、コンテキスト・メニューからNewメニュー・オプションを選択。
  11. アプリケーションウィンドウから「Departments.jsf」ページをタスク・フローの上にドラッグ・アンド・ドロップします。

    アプリケーション・ナビゲータでViewControllerプロジェクトを選択、コンテキスト・メニューからNewメニュー・オプションを選択。

    結果のページがバインド・タスク・フローの一部になります。

  12. 次に、タスク・フローを右クリックし、「Convert To Task Flow With Page Fragments...」を選択します。

    後でパネル・スプリングボード・コンポーネントを含むページを作成します。その作成後に、このタスク・フローをリージョンとしてスプリングボード上に追加できます。


    アプリケーション・ナビゲータでViewControllerプロジェクトを選択、コンテキスト・メニューからNewメニュー・オプションを選択。

    ポップアップで、「OK」をクリックして変換プロセスを完了します。

    ViewControllerプロジェクトとともにAppナビゲータを選択、そしてコンテキストメニューで新しいメニュー・オプションを選択。

    すべての作業内容を保存します。

  13. 次に、従業員のページおよびタスク・フローに対しても同じプロセスを実行します。そうすることで、スプリングボードに追加するための2種類のコンポーネントが作成されます。

  14. View Controller」プロジェクトを右クリックし、コンテキスト・メニューで「New」→「Page...」を選択します。

    アプリケーション・ナビゲータでViewControllerプロジェクトを選択、コンテキスト・メニューからNewメニュー・オプションを選択。
  15. Employees.jsfという名前をつけ、空のページを使用してページを作成します。

    アプリケーション・ナビゲータでViewControllerプロジェクトを選択、コンテキスト・メニューからNewメニュー・オプションを選択。
  16. Data Controlsパレットで「AppModuleDataControl」を展開し、「EmployeeView1」をページにドラッグ・アンド・ドロップします。
    ポップアップ・メニューで「ADF Form ...」を選択します。

    アプリケーション・ナビゲータでViewControllerプロジェクトを選択、コンテキスト・メニューからNewメニュー・オプションを選択。
  17. Create Formダイアログで、「Read-Only Form」チェック・ボックスを選択し、次のフィールドを削除します。

    JobIdSalaryCommissionPctManagerIdDepartmentId

    OK」をクリックします。

    アプリケーション・ナビゲータでViewControllerプロジェクトを選択、コンテキスト・メニューからNewメニュー・オプションを選択。
  18. 結果のページは次のようになります。

    作業内容を保存します。

    アプリケーション・ナビゲータでViewControllerプロジェクトを選択、コンテキスト・メニューからNewメニュー・オプションを選択。
  19. ViewController」プロジェクトを選択し、コンテキスト・メニューで「New」→「ADF Task Flow...」を選択します。

    アプリケーション・ナビゲータでViewControllerプロジェクトを選択、コンテキスト・メニューからNewメニュー・オプションを選択。
  20. emps-task-flow-definition.xmlという名前をつけ、「Create with Page Fragments」チェック・ボックスの選択を解除します。「OK」をクリックし、タスク・フローを作成します。

    アプリケーション・ナビゲータでViewControllerプロジェクトを選択、コンテキスト・メニューからNewメニュー・オプションを選択。
  21. アプリケーションウィンドウから「Employees.jsf」ページをタスク・フローの上にドラッグ・アンド・ドロップします。

    アプリケーション・ナビゲータでViewControllerプロジェクトを選択、コンテキスト・メニューからNewメニュー・オプションを選択。

  22. 次に、タスク・フロー内を右クリックし、「Convert To Task Flow With Page Fragments...」を選択します。

    前述のとおり、後でパネル・スプリングボード・コンポーネントを含むページを作成します。その作成後に、このタスク・フローをリージョンとしてスプリングボード上に追加できます。

    アプリケーション・ナビゲータでViewControllerプロジェクトを選択、コンテキスト・メニューからNewメニュー・オプションを選択。
  23. ポップアップで、「OK」をクリックしてプロセスを完了します。

  24. 作業内容を保存します。

  25. スプリングボードを含むページを作成します。このページをViewControllerプロジェクトで作成し、springboard.jsfという名前をつけ、「Create Blank Page」ラジオ・ボタンを選択します。「OK」をクリックします。

    アプリケーション・ナビゲータでViewControllerプロジェクトを選択、コンテキスト・メニューからNewメニュー・オプションを選択。
  26. Componentsウィンドウから、「Layout」ノードを展開して、Interactive Containers and Headersセクションまでスクロールします。次に、「Panel Springboard」を選択し、ページにドラッグ・アンド・ドロップします。

    アプリケーション・ナビゲータでViewControllerプロジェクトを選択、コンテキスト・メニューからNewメニュー・オプションを選択。
  27. panelSpringboard」コンポーネントを選択し、プロパティウィンドウで、Display Modeをgridに設定します。

    アプリケーション・ナビゲータでViewControllerプロジェクトを選択、コンテキスト・メニューからNewメニュー・オプションを選択。
  28. panelSpringboardコンポーネント内で右クリックし、「Insert Inside Panel Springboard」→「Show Detail Item」を選択します。

    アプリケーション・ナビゲータでViewControllerプロジェクトを選択、コンテキスト・メニューからNewメニュー・オプションを選択。

    もう1つの詳細項目をスプリングボードに追加します。

    アプリケーション・ナビゲータでViewControllerプロジェクトを選択、コンテキスト・メニューからNewメニュー・オプションを選択。
  29. それぞれのshowDetailItemについて、プロパティ・インスペクタを使用してTextの値を設定します。

    showDetailItem 1 = Show Departments
    showDetailItem 2 = Employees

    作業内容を保存します。

    アプリケーション・ナビゲータでViewControllerプロジェクトを選択、コンテキスト・メニューからNewメニュー・オプションを選択。
  30. それぞれのshowDetailItemについて、「Icon」プロパティを選択し、それぞれ次の画像名に設定します。

    Show Departments = 36-toolbox.png
    Employee = 19-gear.jpg

    プロパティを設定するには、カーソルをIconプロパティの右に移動して、青の歯車アイコンをクリックします。

    アプリケーション・ナビゲータでViewControllerプロジェクトを選択、コンテキスト・メニューからNewメニュー・オプションを選択。

    次に、「Edit」を選択します。

  31. アプリケーション・ナビゲータでViewControllerプロジェクトを選択、コンテキスト・メニューからNewメニュー・オプションを選択。

    適切な画像を選択し、「OK」をクリックします。

    アプリケーション・ナビゲータでViewControllerプロジェクトを選択、コンテキスト・メニューからNewメニュー・オプションを選択。

    画像を'resources'ディレクトリに格納するかを確認するプロンプトが表示されたら、「Yes」をクリックします。
    Save JSF Resource Fileでデフォルト・ネームを受け入れ、OKをクリックします。

    アプリケーション・ナビゲータでViewControllerプロジェクトを選択、コンテキスト・メニューからNewメニュー・オプションを選択。
  32. 次に、スプリングボード項目により起動されるページまたはタスク・フローを指定して関連付けます。そのためには、ページまたはタスク・フローをスプリングボード詳細項目の上にドラッグ・アンド・ドロップします。

  33. depts-task-flow-definition」をShow Departments詳細項目の上にドラッグ・アンド・ドロップします。

    マウス・ボタンを離すと、項目の作成方法を指定するプロンプトが表示されます。ここでは、項目をRegionとして作成します。

    アプリケーション・ナビゲータでViewControllerプロジェクトを選択、コンテキスト・メニューからNewメニュー・オプションを選択。
  34. emps-task-flow-definition」をEmployees詳細項目にドラッグし、Regionとして作成します。


  35. Structureウィンドウは以下のイメージのようになります。
  36. 作業内容を保存します。

    アプリケーション・ナビゲータでViewControllerプロジェクトを選択、コンテキスト・メニューからNewメニュー・オプションを選択。
  37. 最後に、「springboard.jsf」ページを右クリックして、「Run」を選択します。

    アプリケーション・ナビゲータでViewControllerプロジェクトを選択、コンテキスト・メニューからNewメニュー・オプションを選択。
  38. それぞれのアイコンをクリックして、スプリングボードで個々のタスク・フローをどのように起動できるかを確認します。

    アプリケーション・ナビゲータでViewControllerプロジェクトを選択、コンテキスト・メニューからNewメニュー・オプションを選択。

    1つの項目を選択すると、すべてのアイコンがブラウザの上部に移動し、その下にページ詳細が表示されます。

    アプリケーション・ナビゲータでViewControllerプロジェクトを選択、コンテキスト・メニューからNewメニュー・オプションを選択。

    別のアイコンをクリックすると、ページが切り替わります。


    アプリケーション・ナビゲータでViewControllerプロジェクトを選択、コンテキスト・メニューからNewメニュー・オプションを選択。

  39. ブラウザを閉じて、JDeveloperを終了します。

まとめ
このチュートリアルでは、データベースとやり取りする小規模なWebアプリケーションを作成しました。このチュートリアルで学習した内容は、以下のとおりです。 リッチWebアプリケーションの構築の詳細は、下記のWebサイトを参照してください。

ブックマーク 印刷 すべて表示 | すべて非表示
トップへ戻る

このページはお役に立ちましたか。



Copyright c 2014, Oracle and/or its affiliates.All rights reserved.