ADFバインディングを使用したJSPツリー表の作成

マスター/ディテール関連から導出された属性の階層リストがビジネス・サービスのデータ・オブジェクトに含まれる場合、ツリー・コントロール・バインディングを作成し、これらの属性を表示できます。ツリー・バインディング・エディタを使用して、選択したビジネス・サービスのデータ・コレクションの関連をツリー・バインディングが横断する方法を決定する2つの規則(ルート・ノード規則とブランチ・ノード規則)を定義します。

現在、ツリー・コントロールは「データ・コントロール・パレット」では使用できません。ツリー・バインディングを作成し、Webページでバインディングにアクセスするには、次の手順を使用します。

バインディング・イテレータを作成するには、次のようにします。

  1. ADF対応のJSPページを作成します

    StrutsベースのJSPを作成する場合、Strutsページ・フローを使用してページを作成する必要があります。

  2. 「表示」 次の選択 「構造」を選択し、開いているファイルの「構造」ウィンドウを表示します。
  3. 「アプリケーション・ナビゲータ」で、Webページを右クリックし、「ページ定義に移動」を選択します。

    ADFデータバインド・コンポーネントをWebページに追加すると、「ページ定義」が自動的に作成されます。ツリー表を追加するWebページにADFデータバインド・コンポーネントが含まれていない場合、ページ定義ファイルを作成するよう求められます。

  4. 「構造」ウィンドウで、「ページ定義」の「実行可能ファイル」ノードを開き、マスター・データ・コレクションのイテレータが存在するかどうかを確認します。「実行可能ファイル」ノードまたはイテレータが存在しない場合は、次のステップを実行します。

ツリー・コントロール・バインディングおよびルート・ノード規則を作成するには、次のようにします。

  1. 「ページ定義」が表示された「構造」ウィンドウで、「バインディング」ノードを探します。(ページにバインディングが含まれていないため)「バインディング」ノードが存在しない場合、pagenamePageDefノードを右クリックし、pagenamePageDefの中に挿入」 次の選択 「バインディング」を選択します。
  2. 「バインディング」ノードを右クリックし、「バインディングの中に挿入」 次の選択 「参照」を選択します。
  3. 「項目の挿入」ダイアログで、「ツリー」を選択し、「OK」をクリックします。
  4. 「ツリー・バインディング・エディタ」ダイアログで、「規則の編集」タブを使用して、マスター・データ・コレクションから表示する親ノード規則を定義します。たとえば、顧客のマスター・コレクションには注文のディテール・コレクションがあります。

ツリーのブランチ表示規則を定義するには、次のようにします。

  1. 「ツリー・バインディング・エディタ」ダイアログの「規則の編集」タブをクリックし、最初のディテール・コレクションから表示する子ブランチ属性規則を定義します。

  2. 「データ・コレクション定義」リストで、ツリーのブランチ・ノードへの移入に使用するデータ・コレクションを選択します。これは、ツリーのノードを定義するディテール・コレクションです。たとえば、ツリーに注文ID情報を表示する元となる注文ディテール・コレクションです。

  3. 「表示属性」リストで、ツリーのブランチ・ノードとして表示する単一属性を選択します。たとえば、各顧客の姓などです。

  4. 「ブランチ規則アクセッサ」リストで、ツリーの最初のブランチ・データ・コレクションと次のブランチ間のリンクを指定するアクセッサを選択します。たとえば、注文コレクションと注文品目コレクションのビジネス・コンポーネント・アクセッサは、リストではOrderItemsViewとして表示されます。

    注意: ビジネス・サービス・モデル・プロジェクトで、選択したブランチ・データ・コレクションにこれ以外のアクセッサが定義されていない場合、リストには<none>が表示されます。これは、選択したコレクションの属性がツリーでリーフ・ノードとして表示されるため、アクセッサが必要ないことを意味します。

  5. 「新しい規則を追加」をクリックし、子ブランチ・ノードの規則の定義を完了します。

  6. 「規則の表示」をクリックし、ルート・ノード規則を表示します。たとえば、顧客と注文の例では、次のように表示されます。

    Viewobject rule: myPackage.OrdersItemsView, OrderId, OrderStatus, <none>

    ADF Business Componentsに基づくこの規則では、ツリーの2つ目のブランチのノードとしてOrderIdおよびOrderStatus属性を表示することを定義しています。noneは、このブランチはリーフ・ノードで構成されているため、アクセッサがないことを意味します。

  7. ビジネス・サービスがブランチを横断するためのアクセッサをサポートしているかぎり、「規則の編集」タブでこれらのステップを繰り返し、ツリーの新規ブランチを定義できます。

  8. 「OK」をクリックし、バインディング設定を保存します。

    バインディング・エディタにより、定義した規則のエラー・チェックが行われます。次のエラー・メッセージが表示されます。

ツリー・バインディングの規則を正常に作成した後、EL式を使用してJSPページのバインディングにアクセスできます。

たとえば、次の式により、ルート・コレクションの属性値にアクセスし、ヘッダーとして表示します。

<c:out value="${bindings.DCTree.labels.CustLastName}"/>

ルート・ノードにアクセスするには、次の例のように、ルート・ノードで動作するforEachループを作成する必要があります。

<c:forEach var="Row" items="${bindings.DCTree.rootNodeBinding.children}">

子ノードにアクセスするには、次の例のように、子ノードで動作するforEachループを作成する必要があります。

<c:forEach var="childNode" items="${Row.children}">

次の例は、これらのEL式を使用して表のツリー・バインディングを表示する方法を示します。

<table border="1" width="100%">
     <tr>
        <th>
           <c:out value="${bindings.DCTree.labels.CustLastName}"/>
        </th>
        <th>
           Details
        </th>
     </tr>
     <c:forEach var="Row" items="${bindings.DCTree.rootNodeBinding.children}">
       <tr>
          <td>
             <c:out value="${Row.Dname}"/> 
          </td>
          <td>
             <table border="1" width="100%">
                <c:forEach var="childNode" items="${Row.children}">
                   <tr>
                      <td><c:out value="${childNode.OrderId}" /> </td>
                      <td><c:out value="${childNode.OrderStatus}" /> </td>
                      <td><c:out value="${childNode.OrderTotal}" /> </td>
                   </tr>
                </c:forEach>
             </table>
          </td>
       </tr>
     </c:forEach>
   </table>
	
    

ADFデータ・コントロールを使用したHTML表の操作
JSPページのADFバインディング式の編集