ADFメソッド起動用のメソッド・パラメータの指定

データ・コントロール・パレットでメソッドの戻り値を操作する場合、そのメソッドが動作する際に、ADFイテレータ・バインディングは活用されません。通常、メソッドの戻り値を自分のドキュメントまたはデータ・ページにダウンロードできます。その結果、メソッドの実行は、ADFライフサイクルにより(イテレータ・バインディングなしで)暗黙的に処理されます。しかし、メソッドがパラメータ値を使用する場合、メソッドを起動する前に事前のステップを実行して、パラメータ値をメソッドにバインドする必要があります。次の各手順はいくつかの選択肢について説明しますが、そのうち最初のものが推奨されています。

ページ・フローを使用して、実行の前にメソッドの作成をするには、次のようにします。

  1. ページ・フロー・ダイアグラムを開き、データ・アクション(DA1)とデータ・ページ(DP1)を挿入して、それら2つの間でフォワード遷移を描きます。

    ページ・フローに別個のデータ・アクションとデータ・ページが表示されています

  2. データ・コントロール・パレットを使用し、準備対象のパラメータを保持しているメソッドの戻り値ノードをデータ・アクションにドロップします。

  3. データ・ページ(DP1)用のWebページを作成し、メソッドの戻り値から得られたデータをレンダリングします。

  4. ページ・フローに戻り、完成したページ・フロー・ダイアグラムを表示します

    データ・ページ完成

  5. ページ・フローの「ソース」タブをクリックし、データ・アクション(DA1)のmodelReferenceプロパティを見つけ、結果をレンダリングするために使用されるページのUIモデル(DP1UIModel)に一致しなくなるよう、その値を変更します。次のようになります。

    <action path="/DA1" className="oracle.adf.controller.struts.actions.DataActionMapping" 
                        type="oracle.adf.controller.struts.actions.DataAction" name="DataForm">
      <set-property property="modelReference" value="DA1UIModel"/>
      <forward name="success" path="/DP1.do"/>
    </action>        

    このステップを使用すると、メソッド・イテレータを使用せずにパラメータ・バインディングが発生するようになります。

前述の手順を使用した場合、メソッドが起動される前に、ページ・フローによりパラメータがメソッドにバインドされるようになります。しかし、この目的でデータ・アクションとデータ・ページを使用することを望まない場合、かわりにページに対するADFライフサイクルのprepareModel()メソッドをオーバーライドできます。結果は同じです。prepareModel()メソッドのコールによって、メソッドの呼出しが実行される前にメソッドのパラメータがバインドされます。

ページのprepareModel()フェーズをオーバーライドする手順は、次のとおりです。

  1. ページのPageControllerのサブクラスを作成するには、ページ・フロー・ダイアグラムでデータ・ページまたはデータ・アクションを右クリックして「コードに移動」を選択します。

  2. ダイアログの「拡張対象」フィールドに、スーパークラスoracle.adf.controller.v2.lifecycle.PageControllerが指定されています。デフォルト値のままで「OK」をクリックします。

    設計時、クラス・ファイルがプロジェクトに追加され、Javaソース・エディタで開かれます。

  3. 「ソース」「メソッドのオーバーライド」を選択して「メソッドのオーバーライド」ダイアログを開きます。

  4. 「メソッドのオーバーライド」ダイアログで、prepareModel(oracle.adf.controller.v2.context.LifecycleContext):voidを選択します。

  5. Javaソース・エディタでprepareModel()メソッドを実装し、サブクラスを保存します。

    public void prepareModel(LifecycleContext context) throws Exception 
      { 
          Long  rowCount = new Long(20); 
      
          Integer rangeSize = new Integer(3); 
          BindingContext p0 = context.getBindingContext(); 
          if (p0.containsKey("rangeSize")) 
          p0.remove("rangeSize"); 
        
          p0.put("rangeSize", rangeSize); 
          if (p0.containsKey("rowCount")) 
            p0.remove("rowCount"); 
        
          p0.put("rowCount", rowCount); 
          super.prepareModel(context); 
      }        

データ・コントロール・パレットを使用したビジネス・サービス・メソッドの結果の挿入

データ・コントロール・パレットを使用したビジネス・サービス・アクションの挿入
アクション・バインディングのメソッド・パラメータの指定