ヘッダーをスキップ
Oracle Fusion Middleware Oracle Application Development Framework Fusion開発者ガイド
11gリリース1 (11.1.1.7.0)
B52028-05
  目次へ移動
目次

前
 
次
 

17 リージョンとしてのタスク・フローの使用

この章では、ADFリージョンを使用してJSFページまたはページ・フラグメントにADFタスク・フローをレンダリングする方法を説明します。

この章の内容は次のとおりです。

17.1 ADFリージョンでのタスク・フローの使用の概要

ADFリージョンを使用して、JSFページまたはページ・フラグメント(.jsff)にバインド・タスク・フローをレンダリングできます。ADFリージョンは次で構成されます。

初めてレンダリングされるときのADFリージョンのコンテンツは、バインド・タスク・フロー内の最初のビュー・アクティビティのものです。バインド・タスク・フローで使用するビュー・アクティビティは、ページではなくページ・フラグメントに関連付ける必要があります。

タスク・フロー・バインディングの入力パラメータまたはコンテキスト・イベントを使用して、ADFリージョンに値を渡せます。また、タスク・フロー・バインディングのparametersMapプロパティを構成すると、そのタスク・フロー・バインディングによってバインド・タスク・フローからADFリージョンへ渡される入力パラメータを指定できます。

ADFリージョンを構成して、リージョンのアクティブ化やリフレッシュのタイミングを指定できます。また、ADFリージョンおよびバインド・タスク・フローを構成することで、バインド・タスク・フロー内でナビゲーション・コントロールを停止させ、ADFリージョンを含むページに渡すこともできます。さらに、リージョンにレンダリングされるバインド・タスク・フローをタスク・フロー・バインディングが実行時に決定する動的リージョン(ADF動的リージョン)を作成し、動的リージョン・リンクを構成すると、実行時にADF動的リージョンにレンダリングされるバインド・タスク・フローをエンド・ユーザーが変更できるようになります。

17.1.1 ADFリージョンでタスク・フローを実行する利点

バインド・タスク・フローをADFリージョンとして実行する主な理由として、再利用があります。特定のアプリケーション機能をバインド・タスク・フローおよびADFリージョンに分離することで、アプリケーション全体で再利用できます。バインド・タスク・フロー内のアプリケーション機能を抽出、構成およびパッケージ化すると、ADFリージョンを使用して他のページに追加できます。ADFリージョンは、必要に応じてどこでも再利用できます(つまり、親ページに依存しません)。さらに、親ページの表示をADFリージョンから分離することも可能で、メニュー、ボタンおよびナビゲーション領域はADFリージョンの表示内容に影響されません。バインド・タスク・フローを変更すると、変更内容はそのタスク・フローを使用するすべてのADFリージョンに適用されます。

17.1.2 タスク・フローおよびADFリージョンのユースケースと例

図17-1はFusion Order Demoアプリケーションの登録ページ(register.jspx)を示しており、2つのADFリージョンがレンダリングされています。これらのリージョンの1つ(「登録のヘルプ」)は静的で、登録ページの他の場所でエンド・ユーザーが起動するアクションに関係なく表示されます。Fusion Order Demoアプリケーションのhelp-task-flow.xmlタスク・フローで定義されたビュー・アクティビティがレンダリングされ、エンド・ユーザー向けのヘルプ情報が表示されます。このタイプのリージョンの作成に関する詳細は、17.2項「ADFリージョンの作成」を参照してください。

register.jspxにレンダリングされるもう1つのリージョンは、動的リージョン(ADF動的リージョン)です。レンダリングされるタスク・フローは、エンド・ユーザーのアクションによって異なります。エンド・ユーザーが登録ページの「顧客として登録」をクリックした場合は、ADF動的リージョンによって顧客登録タスク・フロー(customer-registration-task-flow.xml)がレンダリングされます。一方、エンド・ユーザーが「従業員として登録」をクリックした場合は、ADF動的リージョンによって従業員登録タスク・フロー(employee-registration-task-flow.xml)がレンダリングされます。このタイプのリージョンの作成に関する詳細は、17.8項「ADF動的リージョンの作成」を参照してください。

図17-1 Fusion Order DemoアプリケーションのADF動的リージョンおよびADFリージョン

Fusion Order DemoアプリケーションのADFリージョン

ADFリージョンにレンダリングするタスク・フローは、単純なもの(ヘルプ・タスク・フローに、ヘルプ情報をレンダリングする1つのビュー・アクティビティを含めるなど)でも構わないほか、顧客登録タスク・フローのように、タスク完了までの一連の手順でエンド・ユーザーを導く、多くのステップを含めることもできます。

図17-2は、顧客登録タスク・フローの一部を示しています。エンド・ユーザーが入力した情報を確認できるようにするビュー・アクティビティ(たとえば、reviewCustomerInfo)、エラー発生時にメッセージを表示する例外ハンドラ・アクティビティ(errorPage)、およびエンド・ユーザーによる変更を取り消したりコミットするためのタスク・フロー・リターン・アクティビティが含まれています。これらのすべてのタスク・フロー・アクティビティをADFリージョン内にレンダリングできます。

図17-2 Fusion Order Demoアプリケーションの顧客登録バインド・タスク・フロー

Fusion Order Demoの顧客登録タスク・フロー

1つの特例として、タスク・フロー・リターン・アクティビティがあります。バインド・タスク・フローの実行終了時に、(バインド・タスク・フローをホストするページまたはページ・フラグメントを除いて)制御の戻し先となるコール元がないために制御を戻せないことがよくあります。そのため、ADFリージョンにレンダリングするバインド・タスク・フローでは、制御フローを適切に設計してください。

17.1.3 ADFリージョンにレンダリングされるタスク・フローの追加の機能

ADFリージョンにレンダリングされるタスク・フローが他のタスク・フローおよびADF機能とどのように対話するかを理解しておくと役立ちます。ADFリージョンにタスク・フローをレンダリングする前に、次の各項の情報を確認してください。

17.1.3.1 ページ・フラグメントおよびADFリージョン

ページ・フラグメントとは、別のJSFページのコンテンツとしてレンダリングされるJSF JSPドキュメント(ファイル拡張子は.jsff)です。ページ・フラグメントに複数のルート・コンポーネントを使用することはできません。ページ・フラグメントの表示パフォーマンスを最適化するために、複数のルート・コンポーネントを1つのルート・コンポーネントにラップすることをお薦めします。また、ページ・フラグメントに1つのビジュアル・ルート・コンポーネントおよび(起動するまでエンド・ユーザーに表示されない)popupコンポーネントのみが含まれる場合も、これらのコンポーネントを1つのルート・コンポーネントにラップすることをお薦めします。たとえば、bottomHeight属性を0ピクセルに設定して、popupコンポーネントをpanelStretchLayoutコンポーネントの一番下のファセットに配置します。

ページ・フラグメントに複数のルート・コンポーネントがある場合は、実行時にFusion Webアプリケーションによって例17-1のようなメッセージが記録されます(r1はページ・フラグメントをレンダリングするADFリージョンを識別します)。

例17-1 複数のルート・コンポーネントがあるページ・フラグメントに関するログ・メッセージ

<RegionRenderer> <encodeAll> The region component with id: r1
has detected a page fragment with multiple root components.
Fragments with more than one root component may not display
correctly in a region and may have a negative impact on
performance. It is recommended that you restructure the page
fragment to have a single root component.

ルート・コンポーネント要素を1つのみにすることとは別に、ページ・フラグメントには次のいずれのタグも含めることはできません。

  • <af:document>

  • <f:view>

  • <f:form>

  • <html>

  • <head>

  • <body>

これらのタグをドキュメント内で使用できるのは1回のみで、JSF JSPページでのネストはサポートされません。たとえば、<html>タグはJSF JSPページにすでに含まれているため、ページに埋め込まれたページ・フラグメントに含めることはできません。

例17-2には、単純なページ・フラグメントが含まれています。JSF JSPページとは異なり、<f:view>タグや<f:form>タグは含まれていません。

例17-2 ページ・フラグメントのソース・コード

<?xml version='1.0' encoding='UTF-8'?>
<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.1"
          xmlns:af="http://xmlns.oracle.com/adf/faces/rich">
  <af:commandButton text="commandButton 1" id="cb1"/>
</jsp:root>

別のJSFページに含めるページ・フラグメントは、リージョン(af:regionタグ)内でネストする必要があります。JSF JSPページにリージョンとして追加されるバインド・タスク・フローは、ページをコールできないため、ページ・フラグメントをコールする必要があります。

17.1.3.2 ビュー・ポートおよびADFリージョン

ビュー・ポートは、他のビュー・ポートに関係なく移動できる表示領域です。ブラウザ・ウィンドウとADFリージョンはいずれもビュー・ポートの例です。ルート・ビュー・ポートには、ブラウザ・ウィンドウのメイン・ページが表示されます。ルート・ビュー・ポートには、子ビュー・ポート(ページ上のリージョンなど)を含めることができますが、親ビュー・ポートはありません。

oracle.adf.controllerパッケージのViewPortContextインタフェースを実装するJavaクラスを使用すると、ビュー・ポートの詳細が表示されます。詳細は、Oracle Fusion Middleware Oracle ADFコントローラJava APIリファレンスを参照してください。

17.1.3.3 セキュリティおよびADFリージョン

ADFリージョンに表示されるバインド・タスク・フローおよび関連付けられているページ定義に対して、セキュリティを設定できます。表示する権限がないADFリージョンを含むページをエンド・ユーザーが表示すると、ADFリージョンのコンテンツは表示されません。認証メカニズムはトリガーされません。詳細は、第30章「Fusion WebアプリケーションでのADFセキュリティの有効化」を参照してください。

17.1.3.4 親ページによるADFリージョンの機能の特定

ページに含まれるADFリージョンの1つで現在使用できる機能の特定をページで行うことが必要な場合もあります。たとえば、queueActionEventInRegion()メソッドを使用して、現在の状態に基づいてページがADFリージョン内のコントロール・フローを初期化する必要がある場合です。親ページはリージョン機能を使用して、そのページの1つのリージョンについて、現在の状態に基づいて現在の結果を識別します。親ページに対して、リージョン内に結果の可能性があるかどうかが示されます。

次のシナリオに、アプリケーションでの一般的なリージョン機能の使用方法を示します。

  1. ページ内のADFリージョンに、関連付けられているページ・フラグメントが表示されます。

  2. ユーザーが、ADFリージョン内でボタンを選択したり、他のアクションを実行します。

  3. 親ページにより、ADFリージョンの結果(リージョン機能)が識別されます。

  4. ADFリージョンの機能に基づいて、親ページのボタンが更新されます。

ADFリージョンの機能を決定するEL式の構文は次のとおりです。

#{bindings.[regionId].regionModel.capabilities['outcome']}

regionIdはページ上のADFリージョン・コンポーネントのIDで、outcomeはADFリージョン内で検証される、可能性がある結果です。

リージョン機能では、EL式を介して、指定されたADFリージョンのregionModelを使用できることが求められます。EL式では、現在のバインディング・コンテナ以外のバインディング・コンテナにあるバインディングには、アクセスしないでください。リージョン機能は、使用できない場合があります。ADFリージョンがネストされており、現在のバインディング・コンテナ内でregionModelに到達できない場合などです。これは、ネストされたリージョンのネストされたバインディング・コンテナがまだ存在しないか、すでに解放されている可能性があるためです。

17.2 ADFリージョンの作成

ADFリージョンを作成するには、ADFリージョンをレンダリングするページに対するビュー・アクティビティまたはタスク・フロー・コール・アクティビティが少なくとも1つ含まれているバインド・タスク・フローをドラッグ・アンド・ドロップします。これにより、作成されるADFリージョンには、実行時に表示されるコンテンツが必ず含まれます。

バインド・タスク・フローのビュー・アクティビティは、ページ・フラグメント(.jsff)に関連付ける必要があります。ページ・フラグメントではなくページに関連付けられたバインド・タスク・フローをドラッグ・アンド・ドロップしようとした場合、ADFリージョンを作成するためのポップアップ・メニューは表示されません。ページを使用するバインド・タスク・フローを、ページ・フラグメントを使用するものに変換できます。詳細は、14.5.3項「ADFバインド・タスク・フローの変換方法」を参照してください。

ADFリージョンの作成用にJDeveloperによって表示されるポップアップ・メニューには、非動的リージョンおよび動的リージョンを作成するためのオプションが表示されます。動的リージョン(ADF動的リージョン)では、レンダリングされるバインド・タスク・フローは実行時に決まります。ADF動的リージョンの作成に関する詳細は、17.8項「ADF動的リージョンの作成」を参照してください。非動的リージョン(ADFリージョン)に表示されるバインド・タスク・フローは、設計時に決まります。

ADFリージョンを作成する前に、次のことを行う必要があります。

17.2.1 ADFリージョンの作成方法

「アプリケーション・ナビゲータ」からADFリージョンをレンダリングするページへ、バインド・タスク・フローをドラッグします。

ADFリージョンを作成するには:

  1. 「アプリケーション・ナビゲータ」で、バインド・タスク・フローをJSFページにドラッグして、ADFリージョンを配置する場所にドロップします。

  2. 表示されるポップアップ・メニューから「作成」「リージョン」を選択します。

    16.3項「ADFバインド・タスク・フローへパラメータを渡す方法」で説明しているように、JSFページにドロップしたバインド・タスク・フローに入力パラメータが定義されている場合は、「タスク・フロー・バインディングの編集」ダイアログが表示されます。ADFリージョンのパラメータの指定に関する詳細は、17.3項「ADFリージョンのパラメータの指定」を参照してください。

    図17-3 ADFリージョンの「タスク・フロー・バインディングの編集」ダイアログ

    ADFリージョンの「タスク・フロー・バインディングの編集」ダイアログ
  3. 構造ウィンドウで、追加したADFリージョンのノード(af:region)を右クリックし、「プロパティに移動」を選択します。

  4. ADFリージョンのプロパティ・インスペクタのデフォルト値が自動的に移入される次のプロパティを、必要に応じて確認または変更します。

    • ID: ADFリージョンを参照するためにJSFページで使用されるID(たとえば、r1)。

    • 値: ADFリージョン・モデルへのEL参照(たとえば、#{bindings.region1.regionModel})。これはリージョンの動作を記述するリージョン・モデルです。

    • レンダリング: true(デフォルト値)の場合、JSFページのレンダリング時にADFリージョンがレンダリングされます。

  5. JSFページに関連付けられているビュー・アクティビティとADFリージョンの間でパラメータをマップする方法は、17.3項「ADFリージョンのパラメータの指定」を参照してください。

17.2.2 ADFリージョン作成時の処理

ADFリージョンを作成するためにバインド・タスク・フローをJSFページにドロップすると、ページにaf:regionタグが追加されます。af:regionタグは、RegionModelを実装するオブジェクトを参照します。例17-3は、JDeveloperによってJSFページに追加されるメタデータのサンプルを示しています。

例17-3 ADFリージョンの作成用にJSFページに追加されるメタデータ

<af:region value="#{bindings.tf_register_employee1.regionModel}"                   id="r1"/>

さらに、ADFリージョンをホストするページのページ定義ファイルに、タスク・フロー・バインディングが追加されます。例17-4は、JDeveloperによって追加されるメタデータのサンプルを示しています。このタスク・フロー・バインディングにより、ADFリージョンとバインド・タスク・フローの間のブリッジが提供されます。これにより、ADFリージョンの特定のインスタンスが、関連付けられているバインド・タスク・フローにバインドされ、そのバインド・タスク・フローに固有のあらゆる情報が保持されます。taskFlowId属性により、バインド・タスク・フローのソース・ファイルのディレクトリ・パスおよび名前が指定されます。

例17-4 タスク・フロー・バインディングの作成用にページ定義に追加されたメタデータ

<taskFlow id="tf_register_employee1"
              taskFlowId="/WEB-INF/tf_register_employee.xml#tf_register_employee"
              activation="deferred"
              xmlns="http://xmlns.oracle.com/adf/controller/binding"/>

バインド・タスク・フローをJSFページにドロップした際、すべてのデータバインディングは保持されます。実行時、ADFリージョンを含むJSFページに対するリクエストは、最初はJSFページに対するその他のリクエストと同様に処理されます。JSFページ定義が実行されると、JSFページにデータがロードされます。親JSFページのコンポーネント・ツリーで<af:region>タグが検出されると、表示するコンテンツの最初のページ・フラグメントを特定するために、それが実行されます。コンテンツの最初のページ・フラグメントが特定されると、ページ・フラグメントから親JSFページのコンポーネント・ツリーへ、適切なUIコンポーネントが追加されます。

タスク・フロー・バインディングにより、そのタスク・フロー用に、現在のビュー・アクティビティを取得するための次のインタフェースを実装するオブジェクトが作成されます。

oracle.adf.controller.ViewPortContext

タスク・フロー・バインディングのtaskFlowId属性を使用して、次のいずれかに評価されるEL式を参照することもできます。

  • java.lang.String

  • oracle.adf.controller.TaskFlowId

この機能は、ADF動的リージョンを作成する場合に使用します。詳細は、17.8項「ADF動的リージョンの作成」を参照してください。

17.3 ADFリージョンのパラメータの指定

ADFリージョンによって参照されるタスク・フロー・バインディングに追加することで、バインド・タスク・フロー用に定義した入力パラメータをADFリージョンで使用可能にすることができます。メモリー・スコープ、マネージドBeanまたはADFバインディング・レイヤーで使用可能な入力パラメータを参照するには、EL式を使用します。

入力パラメータの指定は、ADFリージョンに情報を提供する方法の1つです。別の方法として、コンテキスト・イベントの使用があります。ADFリージョンに提供する情報の種類によって、情報提供の方法が決まります。次に例を示します。

ADFリージョンの作成およびタスク・フロー・バインディングの追加に関する詳細は、 17.2項「ADFリージョンの作成」を参照してください。バインド・タスク・フローの入力パラメータを定義する方法は、16.3項「ADFバインド・タスク・フローへパラメータを渡す方法」を参照してください。

17.3.1 ADFリージョンにパラメータを指定する方法

メモリー・スコープ、マネージドBeanまたはADFバインディング・レイヤーで使用可能なパラメータをADFリージョンの入力として指定するには、EL式を使用します。

ADFリージョンの入力パラメータを指定するには:

  1. 「アプリケーション・ナビゲータ」で、ADFリージョンが含まれているJSFページを右クリックし、「ページ定義に移動」を選択します。

  2. ページ定義ファイルの概要エディタで、「モデル」セクションを開き、パラメータを指定するタスク・フロー・バインディングを選択します。

  3. 「編集」アイコンをクリックして、図17-4のように「タスク・フロー・バインディングの編集」ダイアログを表示します。

    16.3項「ADFバインド・タスク・フローへパラメータを渡す方法」で説明しているように、バインド・タスク・フローの入力パラメータを定義した場合は、「タスク・フロー・バインディングの編集」ダイアログの「入力パラメータ」セクションにこれらのパラメータが表示されます。


    注意:

    「タスク・フロー・バインディングの編集」ダイアログの「入力パラメータ・マップ」フィールドを使用して、マネージドBeanで指定された入力パラメータのリストを参照するEL式を記述できます。この機能の実装に関する詳細は、17.4項「パラメータ・マップを使用したADFリージョンのパラメータの指定」を参照してください。


    図17-4 「タスク・フロー・バインディングの編集」ダイアログ

    「タスク・フロー・バインディングの編集」ダイアログ
  4. ADFリージョン用に指定する各入力パラメータの値を取得するEL式を記述します。必須として定義したパラメータに対して、EL式を記述する必要があります。たとえば、次のようなEL式を記述します。

    #{pageFlowScope.inputParameter1}

  5. 「OK」をクリックします。

17.3.2 ADFリージョンのパラメータ指定時の処理

例17-5のように、JSFページのページ定義に、taskFlow要素の子要素であるエントリが書き込まれます。

例17-5 ADFリージョンの入力パラメータを指定するためのメタデータ・エントリ

 <taskFlow id="tflow_tf11"
              taskFlowId="/WEB-INF/tflow_tf1.xml#tflow_tf1"
              activation="deferred"
              xmlns="http://xmlns.oracle.com/adf/controller/binding">
      <parameters>
        <parameter id="inputParameter1"
                   value="#{pageFlowScope.inputParameter1}"/>
          <parameter id="inputParameter2"
                   value="#{pageFlowScope.inputParameter2}"/>         
      </parameters>
    </taskFlow>

実行時に、EL式の値attributeで指定された値がADFリージョンに渡されます。

17.4 パラメータ・マップを使用したADFリージョンのパラメータの指定

17.3項「ADFリージョンのパラメータの指定」で説明している、タスク・フロー・バインディングにすべての入力パラメータを表示する方法に加えて(もしくはその代替方法として)、タスク・フロー・バインディングのparametersMapプロパティを使用してマネージドBean上のパラメータ・マップ・オブジェクトを指定できます。参照するパラメータ・マップ・オブジェクトは、次のインタフェースを実装するタイプであることが必要です。

java.util.Map

参照するパラメータ・マップ・オブジェクトにより、ADFリージョンに入力する値にマップされるキーが指定されます。この方法を使用すると、そのページのページ定義内でタスク・フロー・バインディング(taskFlow)要素の下に表示されるparameter子要素の数が減ります。また、この方法ではADFリージョンに渡される入力パラメータをより柔軟に指定できます。

ADFリージョンまたはADF動的リージョンのタスク・フロー・バインディングを構成して、パラメータ・マップを参照できます。バインド・タスク・フローに対して定義する入力パラメータの名前と、パラメータ・マップ・オブジェクトで定義するキー名を、必ず一致させてください。

17.4.1 ADFリージョンの入力パラメータを指定するためのパラメータ・マップの作成方法

ADFリージョンに渡すキーと値のペアを定義するパラメータ・マップ・オブジェクトを参照するために、タスク・フロー・バインディングのparametersMapプロパティを構成します。

ADFリージョンの入力パラメータを指定するためのパラメータ・マップを作成するには:

  1. マネージドBeanを作成するか、java.util.Mapインタフェースを実装するオブジェクトが戻されるように既存のマネージドBeanを編集します。

    ADFリージョンに渡す値とともにキーと値のペアがオブジェクトによって戻されるように、マネージドBeanを構成します。マネージドBeanの詳細は、20.4項「Fusion WebアプリケーションでのマネージドBeanの使用」を参照してください。

  2. 「アプリケーション・ナビゲータ」で、ADFリージョンが含まれているJSFページを右クリックし、「ページ定義に移動」を選択します。

  3. ページ定義ファイルの概要エディタで、「モデル」セクションを開き、パラメータ・マップを指定するタスク・フロー・バインディングを選択します。

  4. 「編集」アイコンをクリックして「タスク・フロー・バインディングの編集」ダイアログを表示します。

  5. 「入力パラメータ・マップ」の横のドロップダウン・リストから「式ビルダー」を選択します。

  6. パラメータ・マップを参照するEL式を記述または作成します。たとえば、次のようなEL式を記述します。

    #{pageFlowScope.userInfoBean.parameterMap}

  7. 「OK」をクリックします。

17.4.2 入力パラメータを指定するためのパラメータ・マップ作成時の処理

実行時に、タスク・フロー・バインディングによって、parametersMapプロパティに対して指定したEL式が評価され、ADFリージョンにレンダリングされるバインド・タスク・フロー用に定義した入力パラメータの名前と一致するキーのマネージドBeanからADFリージョンへ値が戻されます。

例17-6は、2つの値(isLoggedInおよびprincipalName)をparameterMapという名前のパラメータ・マップに書き込む、マネージドBeanのコード・スニペットを示しています。

例17-6 パラメータ・マップを定義するマネージドBean

import java.util.HashMap;
import java.util.Map;
 
public class UserInfoBean {
    private Map<String, Object> parameterMap = new HashMap<String, Object>();
 
    public Map getParameterMap() {
        
        parameterMap.put("isLoggedIn", getSecurity().isAuthenticated());
        parameterMap.put("principalName", getSecurity().getPrincipalName());
        return parameterMap;
    }
}

図17-5は、例17-6に示したパラメータ・マップ・オブジェクト(parameterMap)を指定して「式ビルダー」ダイアログを閉じた後の「タスク・フロー・バインディングの編集」ダイアログを示しています。「タスク・フロー・バインディングの編集」ダイアログの「入力パラメータ」フィールドには、このADFリージョン(checkout-flow)に関連付けらているバインド・タスク・フロー用に定義された入力パラメータが表示されています。タスク・フロー・バインディングにより、例17-6に示したマネージドBeanから、これらのパラメータの値が取得されます。

図17-5 タスク・フロー・バインディング上のパラメータ・マップを参照するEL式

タスク・フロー・バインディングのパラメータ・マップ・プロパティ

例17-7は、ADFリージョンをレンダリングするページのページ定義に表示される、タスク・フロー・バインディングのメタデータを示しています。タスク・フロー・バインディングのメタデータは、バインド・タスク・フロー(taskFlowId属性)およびマネージドBean(parametersMap)の両方を参照します。

例17-7 パラメータ・マップを指定するタスク・フロー・バインディング

<taskFlow id="checkoutflow1"
              taskFlowId="/WEB-INF/checkout-flow.xml#checkout-flow"
              activation="deferred"
              xmlns="http://xmlns.oracle.com/adf/controller/binding"
              parametersMap="#{pageFlowScope.userInfoBean.parameterMap}"/>

<parameterMap>要素は、ページ定義に指定します。<parameters>リスト内の<parameterMap>要素の位置により、パラメータ・マップ内の値が使用されるかどうかが決まります。<parameterMap>要素は、java.util.Mapを実装するオブジェクトを戻すEL式を指定します。このオブジェクトには、タスク・フローの入力パラメータのキー/値ペアが格納されます。タスク・フローに設定されるパラメータは、タスク・フロー・バインディングに指定されている順序で構築されます。


注意:

Refresh="ifNeeded"を指定した場合、パラメータは<parameterMap>要素内でサポートされません。リージョンのリフレッシュが必要かどうかを判断する唯一の条件は、RefreshConditionの評価によって戻されるブール値です。詳細は、17.5.2項「ADFリージョンのリフレッシュについて」を参照してください。


17.5 ADFリージョンのリフレッシュ

ADFリージョンをリフレッシュするタイミングおよびタスク・フローを起動するかどうかを構成できます。ADFリージョンによってタスク・フローを起動できるのは、ADFリージョンがアクティブな状態のときのみです。非アクティブ状態のADFリージョンでは、タスク・フローを起動できず、参照先タスク・フローのIDのNULL値が親ページに戻されます。

17.5.1 ADFリージョンのリフレッシュの構成方法

ADFリージョンを非アクティブからアクティブの状態へ切り替えるタイミングを決定し、ADFリージョンをリフレッシュするタイミングを決定するために、ADFリージョンに関連付けられているタスク・フローのタスク・フロー・バインディングの値を設定します。

ADFリージョンのリフレッシュを構成するには:

  1. 「アプリケーション・ナビゲータ」で、ADFリージョンが含まれているページを選択し、右クリックして「ページ定義に移動」を選択します。

  2. 図17-6に示すように、ページ定義ファイルで「モデル」ビューを開き、「実行可能ファイル」セクションでタスク・フロー・バインディングを選択します。

    図17-6 タスク・フロー・バインディング

    タスク・フロー・バインディング
  3. プロパティ・インスペクタで、「リフレッシュ」プロパティの横にあるドロップダウン・リストから、次のいずれかの値を選択します。

    • デフォルト: ADFリージョンをホストするページが表示されたとき、または、手順4でRefreshConditionプロパティの値として設定するEL式によってtrueが戻されたときに、ADFリージョンが1回リフレッシュされます。

    • ifNeeded: タスク・フロー・バインディング・パラメータの値が変更された場合に、ADFリージョンがリフレッシュされます。この値を選択した場合は、手順4でRefreshConditionプロパティの値を設定しないでください。

  4. 「リフレッシュ」プロパティの値として「デフォルト」を選択した場合は、RefreshConditionプロパティの横にあるドロップダウン・リストから「編集」を選択して式ビルダーを起動し、実行時にブール値を戻すEL式を記述します。EL式によってtrueが戻されると、ADFリージョンがリフレッシュされます。

  5. プロパティ・インスペクタで、activationプロパティの横にあるドロップダウン・リストから、次のいずれかの値を選択します。

    • conditional: タスク・フロー・バインディングのactiveプロパティの値として設定されたEL式によってtrueが戻された場合に、ADFリージョンがアクティブ化されます。

    • deferred: アプリケーションのビュー・レイヤーでFacelets XHTMLページを使用し、Facelets XHTMLページによってviewIDが初めてリクエストされたときにADFリージョンをアクティブ化する場合は、このオプションを選択します。アプリケーションのビュー・レイヤーでJSPテクノロジが使用されている場合にこのオプションを選択すると、immediate(ADFリージョンがただちにアクティブになる)を選択した場合と同じ結果になりますが、これは、ADFリージョンの親コンポーネントがpopupまたはpanelTabbedコンポーネントでそのchildCreation属性がdeferredに設定されている場合を除きます。後者のシナリオが発生した場合は、親コンポーネント(popupまたはpanelTabbed)によって動作が決まります。

      アプリケーションでFacelets XHTMLページが使用される場合は、このオプションをお薦めします。ADF FacesでのFaceletsの使用に関する詳細は、『Oracle Fusion Middleware Oracle Application Development Framework Webユーザー・インタフェース開発者ガイド』の「ADF Facesの概説」を参照してください。

    • immediate: ADFリージョンがただちにアクティブになります。これがデフォルト値になります。

    ドロップダウン・リストで選択した値により、ADFリージョンが非アクティブからアクティブの状態に切り替わるタイミングが決まります。ADFリージョンがタスク・フローを起動するには、アクティブ状態であることが必要です。

  6. activationプロパティの値として conditionalを選択した場合は、activeプロパティの横にあるドロップダウン・リストから「編集」を選択して式ビルダーを起動し、実行時にブール値を戻すEL式を記述します。EL式によってtrueが戻されると、ADFリージョンはタスク・フローを起動します。

17.5.2 ADFリージョンをリフレッシュする方法について

ADFリージョンが最初にリフレッシュされるのは、リージョンが配置されている親JSFページが最初に表示されるときです。最初のリフレッシュでは、ADFリージョンのタスク・フロー・バインディングのパラメータ値がすべて親ページから渡されます。パラメータ値は、ADFリージョン内で初期ページ・フラグメントを表示するために使用されます。バインド・タスク・フローがページの初回作成時に使用できない入力パラメータ値に依存している場合は、NullPointerExceptionオブジェクトなどを使用して、入力パラメータ値がNULLのときにタスク・フローが正しく動作することを確認します。もしくは(または追加的に)、タスク・フロー・バインディングのactiveプロパティを構成して、入力パラメータが使用可能になるまでタスク・フローがアクティブ化されないようにしてください。

ADFリージョンのタスク・フロー・バインディングは、次のタスク・フロー・バインディング属性のいずれかに基づいて再度リフレッシュできます。

  • Refresh属性とRefreshCondition属性の両方が未指定(デフォルト)

    RefreshおよびRefreshConditionタスク・フロー・バインディング属性のどちらも指定されていない場合、タスク・フロー・バインディングのactiveプロパティの値を構成しないかぎり、ADFリージョンのリフレッシュは、親ページの初回表示時に1回のみ行われます。

  • RefreshCondition="#{EL.expression}"

    RefreshConditionがtrueと評価される場合、ADFリージョンは1回のみリフレッシュされます。RefreshConditionはブール値で評価される必要があります。

    RefreshConditionの評価時にEL式でbindings変数が使用されていると、ADFリージョン内に表示されるページ・フラグメントではなく、親ページのバインディング・コンテナが参照されます。

    RefreshConditionは、バインディング・パラメータの値の変更とは無関係です。タスク・フロー・バインディングのパラメータに変更がなければ、ADFリージョン内では何も変化しません。

  • Refresh="ifNeeded"

    タスク・フロー・バインディングのパラメータ値が変更されると、ADFリージョンはリフレッシュされます。

    ADFリージョンのタスク・フロー・バインディングにパラメータがない場合、Refresh="ifNeeded"Refresh属性を指定していないのと同じことになります。

    RefreshifNeededに設定する場合、RefreshCondition属性は指定しないでください。

    動的パラメータ・マップを使用してタスク・フロー・バインディングにパラメータを渡す場合、Refresh="ifNeeded"はサポートされません。その場合、RefreshCondition="#{EL.Expression}"を使用する必要があります。

    パラメータ・マップを使用したパラメータ値の指定に関する詳細は、17.4項「パラメータ・マップを使用したADFリージョンのパラメータの指定」を参照してください。

RefreshConditionおよびRefreshプロパティは相互に排他的です。Refresh="ifNeeded"プロパティはRefreshConditionプロパティよりも優先されます。RefreshConditionの評価時にEL式でバインディング変数が使用されていると、ADFリージョン内に表示されるページ・フラグメントではなく、親ページのバインディング・コンテナが参照されます。ADFページ・ライフサイクルのPrepareRenderフェーズ中に式は評価されます。詳細は、第21章「Fusionページ・ライフサイクル」を参照してください。

例17-8に、ADFリージョンが追加されているページのページ定義にあるタスク・フロー・バインディングのサンプルを示します。

例17-8 ADFリージョンのバインディングに指定されたRefreshオプション

<taskFlow id="Department1" taskFlowId="/WEB-INF/Department#Department"
                   Refresh="ifNeeded"
                   xmlns="http://xmlns.oracle.com/adf/controller/binding">
        <parameters>
        <parameter id="DepartmentId" value="#{bindings.DepartmentId.inputValue}"
                   xmlns="http://xmlns.oracle.com/adfm/uimodel"/>
      </parameters>
</taskFlow>

ADFリージョン内のデータ・コントロールをリフレッシュするために、ADFリージョンをリフレッシュする必要はありません。ADFのライフサイクルにおいて、更新対象のイテレータを通知するリフレッシュ・イベントは、ADFリージョンの現在のページのバインディング・コンテナに伝播されます。

17.6 ADFリージョンのアクティブ化の構成

ADFリージョンをアクティブ化するタイミングを構成できます。これにより、ADFリージョンに含まれるタスク・フローをアクティブ化するタイミングが指定されます。ADFリージョンのアクティブ化を構成することで、Fusion Webアプリケーションのページのパフォーマンスを最適化できます。たとえば、5つのADFリージョンを含むページが5つのタスク・フローを参照するとします。Fusion Webアプリケーション・ページのロード時に5つのタスク・フローが同時に実行されないようにするには、activationプロパティを構成してタスク・フロー実行のタイミングを指定します。

17.6.1 ADFリージョンのアクティブ化の構成方法

ADFリージョンに関連付けられているタスク・フロー・バインディングのactivationプロパティを構成して、ADFリージョンをアクティブ化するタイミングを指定します。

ADFリージョンのアクティブ化を構成するには:

  1. 「アプリケーション・ナビゲータ」で、ADFリージョンが含まれているページを選択し、右クリックして「ページ定義に移動」を選択します。

  2. 図17-7に示すように、ページ定義ファイルで「モデル」ビューを開き、「実行可能ファイル」セクションでタスク・フロー・バインディングを選択します。

    図17-7 アクティブ化用に構成するADFリージョンのタスク・フロー・バインディング

    タスク・フロー・バインディング
  3. プロパティ・インスペクタで、activationプロパティの横にあるドロップダウン・リストから、次のいずれかの値を選択します。

    • conditional: タスク・フロー・バインディングのactiveプロパティの値として設定されたEL式によってtrueが戻された場合に、ADFリージョンがアクティブ化されます。

    • deferred: アプリケーションのビュー・レイヤーでFacelets XHTMLページを使用し、Facelets XHTMLページによってviewIDが初めてリクエストされたときにADFリージョンをアクティブ化する場合は、このオプションを選択します。アプリケーションのビュー・レイヤーでJSPテクノロジが使用されている場合にこのオプションを選択すると、immediate(ADFリージョンがただちにアクティブになる)を選択した場合と同じ結果になります。

      アプリケーションでFacelets XHTMLページが使用される場合は、このオプションをお薦めします。ADF FacesでのFaceletsの使用に関する詳細は、『Oracle Fusion Middleware Oracle Application Development Framework Webユーザー・インタフェース開発者ガイド』の「ADF Facesの概説」を参照してください。

    • immediate: ADFリージョンがただちにアクティブになります。これがデフォルト値になります。

    ドロップダウン・リストで選択した値により、ADFリージョンが非アクティブからアクティブの状態に切り替わるタイミングが決まります。ADFリージョンがタスク・フローを起動するには、アクティブ状態であることが必要です。

  4. activationプロパティの値として conditionalを選択した場合は、activeプロパティの横にあるドロップダウン・リストから「編集」を選択して式ビルダーを起動し、実行時にブール値を戻すEL式を記述します。EL式によってtrueが戻されると、ADFリージョンはタスク・フローを起動します。EL式によってfalseが戻された場合、ADFリージョンはADFリージョン内でアクティブだったタスク・フローを非アクティブ化します。

17.6.2 ADFリージョンのアクティブ化構成時の処理

ADFリージョンの実行時の動作は、activationプロパティ用に設定したオプションによって異なります。

図17-8は、ページにADFリージョン(タブ#1、タブ#2、タブ#3)がロードされるとADFリージョン内のすべてのタスク・フローが実行される、デフォルトの動作を示しています。

図17-8 ADFリージョンのデフォルトのアクティブ化

ADFリージョンのデフォルトのアクティブ化

図17-9は、activationプロパティがdeferredに設定されており、アプリケーションでFaceletsが使用される場合の例を示しています。タブ#1およびタブ#2のリージョンがアクティブ状態にあるのは、エンド・ユーザーがこれらのリージョンに移動したためです。タブ#3のリージョンは非アクティブです。

図17-9 ADFリージョンの遅延アクティブ化

ADFリージョンの遅延アクティブ化

図17-10は、activationプロパティがconditionalに設定されており、activeプロパティが実行時にboolean値を戻すEL式に設定されている場合の例を示しています。タブ#1のリージョンがアクティブ状態にあるのは、activeプロパティ用に指定されたEL式によってtrueが戻されるためです。タブ#2およびタブ#3のリージョンが非アクティブ状態にあるのは、activeプロパティ用に指定されたEL式によってfalseが戻されるためです。

リージョンによってタスク・フローが非アクティブ化される(activeプロパティによって戻される値がtrueからfalseに変わる)と、次のイベントが発生します。

図17-10 ADFリージョンの条件付きアクティブ化

ADFリージョンの条件付きアクティブ化

17.7 ADFリージョンのタスク・フロー外への移動

ADFリージョンで実行されるバインド・タスク・フローでは、その親ビュー・アクティビティのナビゲーションのトリガー、またはそのアプリケーションのルート・ページへの移動が必要な場合があります。そのどちらかのユースケースを実装する場合に構成するプロパティ(parent-outcomeおよびroot-outcome)は、親アクション・アクティビティによって公開されます。

たとえば、従業員情報、および従業員の登録ボタンを含むADFリージョンを表示するページがある場合は、parent-outcomeの値を指定できます。登録ページが完了してADFリージョンに戻ると、従業員情報ページは次の従業員でリフレッシュされます。


注意:

ADFリージョンから移動した場合、リージョンの状態は維持されません。


17.7.1 ADFリージョンのタスク・フロー外へのナビゲーションをトリガーする方法

ADFリージョンで実行されるバインド・タスクに親アクション・アクティビティを追加して、親のビュー・アクティビティへ移動するように構成します。

ADFリージョンのタスク・フロー外へのナビゲーションをトリガーするには:

  1. 「アプリケーション・ナビゲータ」で、ADFリージョンで実行されるバインド・タスク・フローのXMLファイルをダブルクリックします。

  2. 「コンポーネント・パレット」の「ADFタスク・フロー」ページで、「親アクション」を選択してバインド・タスク・フローにドラッグします。

  3. バインド・タスク・フローのダイアグラムで、親アクション・アクティビティを選択します。

  4. プロパティ・インスペクタで適切なオプションを選択します。

    • 親結果: 親アクション・アクティビティが親ビュー・アクティビティへ移動するように、リテラル値を入力するか結果を戻すEL式を記述します。生成された結果は、ADFリージョンのバインド・タスク・フローではなく、親ビュー・アクティビティのタスク・フローに移動するために使用されます。

      親ビュー・アクティビティのタスク・フローには、parent-outcomeに対して指定した値を受け入れる制御フロー・ケースまたはワイルドカード制御フロー・ルールを含める必要があります。

    • ルート結果: 親アクション・アクティビティがアプリケーションのルート・ページへ移動するように、リテラル値を入力するか結果を戻すEL式を記述します。


    注意:

    「親結果」および「ルート結果」は相互に排他的です。


  5. (オプション) 親アクション・アクティビティがparent-outcomeまたはroot-outcomeを適切なキューに追加した後のADFリージョン内のコントロール・フローの結果を指定するリテラル値を、「結果」フィールドに入力します。

    outcome要素の指定が役立つのは、親アクション・アクティビティによって送られるparent-outcomeまたはroot-outcomeの結果として親ビュー・アクティビティまたはルート・ページが移動しない場合です。さらに、ADFリージョンにそのまま同じビューが表示されないようにする場合です。outcomeの値を指定しない場合、ADFリージョンのviewIdは変更されません。

17.7.2 タスク・フロー外へのナビゲーション構成時の処理

実行時に、親アクション・アクティビティ用に設定したプロパティ値に基づいて、バインド・タスク・フローのソース・ファイルにエントリが書き込まれます。例17-9は、親アクション・アクティビティの「親結果」および「結果」プロパティのリテラル値を記述すると生成されるサンプル・エントリを示しています。

例17-9 親結果を使用した親アクション・アクティビティのメタデータ

<parent-action id="parentAction1">        <parent-outcome>parent_outcome</parent-outcome>        <outcome id="__2">outcome</outcome>    </parent-action>

例17-10は、親アクション・アクティビティの「ルート結果」および「結果」プロパティのリテラル値を記述すると生成されるサンプル・エントリを示しています。

例17-10 ルート結果を使用した親アクション・アクティビティのメタデータ

<parent-action id="parentAction1">
      <root-outcome>root_outcome</root-outcome>
      <outcome id="__2">outcome</outcome>
</parent-action>

実行時、親アクション・アクティビティ用に構成したプロパティに応じて、バインド・タスク・フローは親ビュー・アクティビティまたはFusion Webアプリケーションのルート・ページへ移動します。

17.8 ADF動的リージョンの作成

ADF動的リージョンは、実行時に、タスク・フロー・バインディングによってtaskFlowId属性の値が動的に決定されるADFリージョンです。これにより、Fusion Webアプリケーションは、タスク・フロー・バインディングのtaskFlowId属性の評価結果に基づいて、ADF動的リージョン内で実行するタスク・フローを決定できます。

図17-11は、エンド・ユーザーがクリックするコマンド・コンポーネント・ボタンに応答してregister.jspxページの中央ファセットに異なる登録タスク・フローがレンダリングされる、Fusion Order Demoアプリケーションの実行時の例を示しています。たとえば、エンド・ユーザーが「従業員として登録する」をクリックした場合は、ADF動的リージョンにemployee-registration-task-flowがレンダリングされます。

実行時、ADF動的リージョンは、レンダリング準備ライフサイクル・フェーズでレンダリングされるタスク・フローを切り替えます。前のタスク・フローのコンポーネントがライフサイクル・フェーズにスムーズに追加されるように、JSFのアプリケーションの起動ライフサイクル・フェーズまではregionModelから移動しないでください。したがって、コンテキスト・イベントに応答して動的リージョン内のタスク・フローを移動しないことをお薦めします。ライフサイクル・フェーズの詳細は第21章「Fusionページ・ライフサイクル」を、コンテキスト・イベントの詳細は28.7項「コンテキスト・イベントの作成」を参照してください。

図17-11 ADF動的リージョン内の顧客登録タスク・フロー

ADF動的リージョン内の顧客登録タスク・フロー

ADF動的リージョンを作成するには、ADF動的リージョンをレンダリングするページへ、バインド・タスク・フローをドラッグ・アンド・ドロップします。バインド・タスク・フローのビュー・アクティビティは、ページ・フラグメント(.jsff)に関連付ける必要があります。

ページ・フラグメントではなくページに関連付けられたバインド・タスク・フローをドラッグ・アンド・ドロップしようとした場合、ADF動的リージョンを作成するためのポップアップ・メニューは表示されません。ページを使用するバインド・タスク・フローを、ページ・フラグメントを使用するものに変換できます。詳細は、14.5.3項「ADFバインド・タスク・フローの変換方法」を参照してください。

17.9項「ADF動的リージョンへのタスク・フローの追加」で説明するように、ADF動的リージョンの作成後は、ADF動的リージョン・リンクを作成して動的リージョンにバインド・タスク・フローを追加できます。

17.8.1 ADF動的リージョンの作成方法

ADF動的リージョンをレンダリングするページへ、バインド・タスク・フローをドラッグ・アンド・ドロップします。

ADF動的リージョンを作成するには:

  1. 「アプリケーション・ナビゲータ」で、ADF動的リージョンを作成するJSFページを選択して開きます。

  2. 最初のバインド・タスク・フローをJSFページにドラッグ・アンド・ドロップします。

  3. 表示されるポップアップ・メニューから「作成」「動的リージョン」を選択します。

  4. 表示される「動的リージョンのマネージドBeanの選択」ダイアログで、適切なオプションを選択します。

    • 既存のマネージドBeanにバインド・タスク・フローのIDを格納するには、「マネージドBean」ドロップダウン・リストから既存のマネージドBeanを選択します。

      マネージドBeanからADF動的リージョンのタスク・フロー・バインディングへ、バインド・タスク・フローのID値が渡されます。

    • ページにマネージドBeanがない場合は、「マネージドBean」ドロップダウン・リストの横にある「追加」アイコンをクリックして、新たに作成します。次の手順で、表示されるダイアログに値を入力します。

      1. Bean名: 新しいマネージドBeanの名前を入力します。たとえば、DynamicRegionBeanと入力します。

      2. クラス名: 新しいマネージドBeanクラスの名前を入力します。

      3. パッケージ: マネージドBeanを含むパッケージの名前を入力するか、参照して特定します。

      4. 拡張対象: マネージドBeanで拡張するJavaクラスの名前を入力します。デフォルト値はjava.lang.Objectです。

      5. スコープ: このフィールドは読取り専用であり、値はbackingBeanに設定されています。マネージドBeanのメモリー・スコープの詳細は、14.2.4項「タスク・フロー用のメモリー・スコープについて」を参照してください。

      6. 「OK」をクリックして、マネージドBeanを構成するダイアログを閉じます。

  5. 表示される「タスク・フロー・バインディングの編集」ダイアログで適切なオプションを選択します。

    • ADF動的リージョンの入力パラメータまたは入力パラメータ・マップを指定しない場合は、「OK」をクリックします。

    • ADF動的リージョンの入力パラメータを指定します。

      詳細は、17.3項「ADFリージョンのパラメータの指定」を参照してください。

    図17-12は、マネージドBeanの構成後に表示される「タスク・フロー・バインディングの編集」ダイアログを示しています。


    注意:

    「タスク・フロー・バインディングの編集」ダイアログの「入力パラメータ・マップ」フィールドを使用して、マネージドBeanで指定された入力パラメータのリストを参照するEL式を記述できます。この機能の実装に関する詳細は、17.4項「パラメータ・マップを使用したADFリージョンのパラメータの指定」を参照してください。


    図17-12 ADF動的リージョンの「タスク・フロー・バインディングの編集」ダイアログ

    ADF動的リージョンの「タスク・フロー・バインディングの編集」ダイアログ
  6. 「OK」をクリックします。

17.8.2 ADF動的リージョン作成時の処理

ADF動的リージョンを作成するためにバインド・タスク・フローをJSFページにドロップすると、ページにaf:regionタグが追加されます。af:regionタグにはタスク・フロー・バインディングへの参照が含まれています。例17-11は、JDeveloperによってJSFページに追加されるメタデータのサンプルを示しています。

例17-11 ADF動的リージョンの作成用にJSFページに追加されるメタデータ

<af:region value="#{bindings.dynamicRegion1.regionModel}" id="r1"/>

さらに、ADF動的リージョンをホストするページのページ定義ファイルに、タスク・フロー・バインディングが追加されます。例17-12は、JDeveloperによって追加されるメタデータのサンプルを示しています。このタスク・フロー・バインディングにより、ADF動的リージョンとバインド・タスク・フローの間のブリッジが提供されます。ADF動的リージョンがバインド・タスク・フローにバインドされ、そのバインド・タスク・フローに固有のあらゆる情報が保持されます。

例17-12 タスク・フロー・バインディングの作成用にページ定義に追加されるメタデータ

<taskFlow id="dynamicRegion1"
      taskFlowId="${backingBeanScope.ManagedBeanName.dynamicTaskFlowId}"
              activation="deferred"
              xmlns="http://xmlns.oracle.com/adf/controller/binding"/>

タスク・フロー・バインディング・メタデータのtaskFlowId属性により、ADF動的リージョンに関連付けられるバインド・タスク・フローを実行時に決定するマネージドBeanが指定されます。JDeveloperにより、このマネージドBeanが作成されるか、このデータを格納するために既存のマネージドBeanが変更されます。例17-13は、JDeveloperによってマネージドBeanに書き込まれるコードの抜粋を示しています。

例17-13 ADF動的リージョンのバインド・タスク・フローを取得するためのマネージドBeanエントリ

import oracle.adf.controller.TaskFlowId;
 ...
    private String taskFlowId = "/directoryPath/toTaskFlow";
 ...
    public TaskFlowId getDynamicTaskFlowId() {
        return TaskFlowId.parse(taskFlowId);
    }
...

実行時には、ADF動的リージョン内に表示されるバインド・タスク・フローのID(taskFlowId)が、マネージドBeanに格納されます。マネージドBeanは、様々なバインド・タスク・フローをADF動的リージョンのタスク・フロー・バインディングに切り替えます。

ADF動的リージョンが再初期化される場合、Fusion WebアプリケーションではADF動的リージョンに関連付けられているタスク・フロー・バインディングを再初期化する必要があります。その際、ADF動的リージョンに渡す新しい入力パラメータや入力パラメータ値があるかどうかが評価されます。

17.9 ADF動的リージョンへのタスク・フローの追加

ADF動的リージョン・リンクは、ADF動的リージョン内でバインド・タスク・フローを別のバインド・タスク・フローに切り替えます。エンド・ユーザーは、コマンド・コンポーネント(ボタンやリンクなど)をクリックして、ADF動的リージョンを新しいバインド・タスク・フローで更新します。

たとえば、ADF動的リージョンのバインド・タスク・フローにより、従業員に関する一般情報(IDや写真など)が表示されるとします。エンド・ユーザーが「詳細」というコマンド・コンポーネントをクリックすると、その従業員の詳細情報を含む別のバインド・タスク・フローの表で、ADF動的リージョンが更新されます。エンド・ユーザーのアクション(リンクのクリック)により、ADF動的リージョンのマネージドBean上のメソッドが起動します。新しいバインド・タスク・フローの値がメソッドに渡され、ADF動的リージョンは新しいバインド・タスク・フローでリフレッシュされます。その後、新しいバインド・タスク・フローがADF動的リージョン内に表示されます。

デフォルトでは、ADF動的リージョン・リンクは、バインド・タスク・フローを別のものに切り替えますが、再び元のバインド・タスク・フローに切り替えることはできません。元のバインド・タスク・フローに戻すには、クリック時に現在のタスク・フローを元のタスク・フローに切り替える2つ目のADF動的リージョン・リンクをページに追加します。

すでに1つ以上のADF動的リージョンがページにあり、同じページに新しいバインド・タスク・フローをADF動的リージョンとして追加する場合は、ADF動的リージョン・リンクを追加できます。図17-13のように、ページにバインド・タスク・フローをドロップして、ADF動的リージョン・リンクの作成を選択すると、現在ページ上にある動的リージョンがすべてメニューに表示されます。

ドキュメント内の既存の動的リージョンにオプションとして追加するバインド・タスクをドラッグ・アンド・ドロップするとメニューが表示され、そこから「動的リージョン・リンク」を選択すると、ドキュメントに含まれる現在の動的リージョンのリストが図17-13のように表示されます。

図17-13 「動的リージョン・リンク」メニュー

「動的リージョン・リンク」メニュー

このメニューを使用して、バインド・タスク・フローの内容を表示するADF動的リージョンを選択します。


ヒント:

動的リージョン・リンクの値は他のUIコンポーネント内で使用できます。たとえば、リスト内の各項目が別のバインド・タスク・フローにリンクしている選択リストを作成できます。リンクされているバインド・タスク・フローはすべて同じ動的リージョンに表示されます。リンクにより、表示するバインド・タスク・フローを切り替えるために作成したマネージドBeanの背後で、クラス内のメソッドが実行されます。


17.9.1 ADF動的リージョン・リンクの作成方法

ADF動的リージョンがすでに含まれているページにバインド・タスク・フローをドラッグ・アンド・ドロップし、表示されるポップ・アップ・メニューで「動的リージョン・リンク」を選択して、リンクを作成できるADF動的リージョンのリストを表示します。

ADF動的リージョン・リンクを作成するには:

  1. 「アプリケーション・ナビゲータ」で、ADF動的リージョン・リンクを作成するJSFページを選択して開きます。

    この手順は、対象となるJSFページに少なくとも1つのADF動的リージョンがすで追加されていることを前提とします。JSFページへのADF動的リージョンの追加に関する詳細は、17.8項「ADF動的リージョンの作成」を参照してください。

  2. バインド・タスク・フローをドラッグしてページ上の任意の場所にドロップします。

    バインド・タスク・フローのビュー・アクティビティは、ページ・フラグメントに関連付ける必要があります。ページを使用するバインド・タスク・フローを、ページ・フラグメントを使用するものに変換できます。詳細は、14.5.3項「ADFバインド・タスク・フローの変換方法」を参照してください。

  3. 表示されるポップアップ・メニューから「動的リージョン・リンク」を選択します。

    すでにページに追加されているすべてのADF動的リージョンのリストがメニューに表示されます。

  4. バインド・タスク・フローの内容を表示するADF動的リージョンの名前を選択します。

  5. 「OK」をクリックします。

17.9.2 ADF動的リージョン作成時の処理

例17-14に示すように、ページへのコマンド・リンクが追加されます。また、ADF動的リージョンのマネージドBeanが更新され、対応するタスク・フロー・バインディングが新しいパラメータで更新されます。

例17-14 動的リージョン・リンク

<af:commandLink text="region2" action="#{RegionBean.region2}"
  id="dynamicRegionLink1"/>