ADFレンダラを使用したデータのレンダリングについて

Oracle ADF Business Componentsデータソース用のHTMLレンダラには、次の2つのタイプがあります。

ADF対応Webページでは、次のような場合にこれらのHTMLレンダラを使用できます。

カスタムHTMLレンダラのサポート

カスタムHTMLレンダラ・クラスを記述し、特定の属性のレンダリングをカスタマイズできます。カスタムHTMLレンダラ・クラスは、 oracle.jdeveloper.html.HTMLFieldRendererImplクラスを拡張する必要があります。カスタムHTMLレンダラ・クラスの作成後、レンダリングする属性にこのレンダラ・クラスをバインドします。

レンダラと属性のバインディング・レベル

レンダラと属性のバインディングには、次の4種類があります。

各レベルのバインディングの優先順位とスコープは、それぞれ異なります。

この中から、レンダラ・クラスをバインドするレベルを必要に応じて選択できます。

HTTPセッション・レベルのバインディング

HTTPセッション・レベルのバインディングは、最も優先順位が低くなりますが、最も広いスコープを持ちます。Oracle ADF Business Componentsでは、属性タイプに対するデフォルトのバインディングはこのレベルで行われます。interMediaレンダラ・クラスとinterMedia型のデフォルトのバインディングは、このレベルで定義されます。バインディングの規則は、次のとおりです。

バインディングの名前フィールドには、属性クラス名とレンダラ・キー(RendererまたはEditRenderer)を指定します。バインディングの値フィールドには、レンダラ・クラス名を指定します。バインディングの名前フィールドでは、クラス名のドット(.)を下線(_)へ置き換えた後、表示レンダラの場合は_Renderer、編集レンダラの場合は_EditRendererを追加します。

たとえば、

"oracle_ord_im_OrdImageDomain_Renderer"/"oracle.ord.html.OrdBuildURLRenderer"

このような名前と値のペアをHTTPセッション・オブジェクトに格納します。これは、oracle.ord.im.OrdImageDomainオブジェクトの表示レンダラがoracle.ord.html.OrdBuildURLRendererオブジェクトであることを意味しています。

もう1つの例を示します。

"oracle_ord_im_OrdImageDomain_EditRenderer"/"oracle.ord.html.OrdUploadFileRenderer"

これは、oracle.ord.im.OrdImageDomainオブジェクトの編集レンダラがoracle.ord.html.OrdUploadFileRendererオブジェクトであることを意味しています。

優先順位の高いレベルのバインディングがない場合、ビジネス・コンポーネントでは、oracle.ord.im.OrdImageDomainオブジェクトのレンダリングが必要になると、属性がビュー・オブジェクトまたはエンティティ・オブジェクトのどちらに属すかにかかわらず、表示レンダラにoracle.ord.html.OrdBuildURLRenderer、編集レンダラにoracle.ord.html.OrdUploadFileRendererが使用されます。

HTTPセッション・オブジェクトの名前と値のペアを変更することにより、カスタム・レンダラ・クラスを設定できます。次のコードは、oracle.ord.im.OrdImageDomainの表示レンダラを user.CustomRendererに設定します。

session.putValue("oracle_ord_im_OrdImageDomain_Renderer", "user.CustomRenderer");

エンティティ・オブジェクト・レベルのバインディング

エンティティ・オブジェクト・レベルのバインディングは、HTTPセッション・レベルのバインディングより優先されます。ただし、バインディングのスコープは狭くなります。対象となるのは、エンティティ・オブジェクトに定義されている属性のみです。

たとえばHTTPセッション・レベルでは、OrdBuildURLRendererが表示レンダラとしてOrdImageDomainにバインドされているとします。エンティティ・オブジェクト・レベルでは、CustomRendererがEmpエンティティ・オブジェクトのphoto属性にバインドされているとします。photo属性はOrdImageDomainタイプです。JSPページでphoto属性を表示する際、ビジネス・コンポーネント・ランタイムはCustomRendererを使用してOrdImageDomainオブジェクトをレンダリングします。ただし、Productエンティティ・オブジェクトにpicture属性がある場合、ビジネス・コンポーネント・ランタイムはOrdBuildURLRendererを使用してpicture属性をレンダリングします。

エンティティ・オブジェクト・レベルのバインディングを設定するには、次のようにします。

  1. アプリケーション・ナビゲータでエンティティ・オブジェクトをクリックします。

    アプリケーション・ナビゲータの下の部分(構造ウィンドウ)に、属性のリストが表示されます。

  2. 属性を右クリックし、「編集」を選択します。
  3. 「プロパティ」タブを選択します。
  4. 表示レンダラの場合、「名前」フィールドにRenderer「値」フィールドにuser.CustomRendererと入力します。編集レンダラの場合、「名前」フィールドにEditRenderer「値」フィールドにuser.CustomRendererと入力します。「追加」をクリックします。
  5. 「OK」をクリックします。入力した内容が、エンティティ・オブジェクトのXMLファイルに追加されます。

ビュー・オブジェクト・レベルのバインディング

ビュー・オブジェクト・レベルのバインディングは、エンティティ・オブジェクト・レベルのバインディングより優先されます。ただし、バインディングのスコープはさらに狭くなります。対象となるのは、ビュー・オブジェクトに定義されている属性のみです。

たとえば、Emp1ViewとEmp2Viewという、Empエンティティ・オブジェクトをベースにした2つのビュー・オブジェクトがあるとします。ビュー・オブジェクト・レベルでは、CustomRenderer1がEmp1Viewビュー・オブジェクトのphoto属性にバインドされているとします。エンティティ・オブジェクト・レベルでは、CustomRenderer2がEmpエンティティ・オブジェクトのphoto属性にバインドされているとします。photo属性はOrdImageDomainタイプです。JSPページでEmp1Viewのphoto属性を表示する際、ビジネス・コンポーネント・ランタイムはCustomRenderer1を使用してOrdImageDomainオブジェクトをレンダリングします。ただし、Emp2Viewビュー・オブジェクトにpicture属性がある場合、ビジネス・コンポーネント・ランタイムはCustomRenderer2を使用してpicture属性をレンダリングします。

ビュー・オブジェクト・レベルのバインディングを設定するには、次のようにします。

  1. アプリケーション・ナビゲータでビュー・オブジェクトをクリックします。

    ナビゲータの下の部分(構造ウィンドウ)に、属性のリストが表示されます。

  2. 属性を右クリックし、「編集」を選択します。
  3. 「プロパティ」タブをクリックします。
  4. 表示レンダラの場合、「名前」フィールドにRenderer「値」フィールドにuser.CustomRendererと入力します。編集レンダラの場合、「名前」フィールドにEditRenderer「値」フィールドに user.CustomRendererと入力します。「追加」をクリックします。
  5. 「OK」をクリックします。入力した内容が、ビュー・オブジェクトのXMLファイルに追加されます。

ADFタグ・レベルのバインディング

ADFタグである<adf:Render>および <adf:InputRender>は、データおよびHTMLレンダラ・オブジェクトへのアクセスにDataSourceオブジェクトを使用しているため、DataSourceを使用してHTMLレンダラを設定できます。DataSourceオブジェクトにはHTTP REQUESTスコープがあります。データ・タグ・レベルのバインディングは、ビュー・オブジェクト・レベル、エンティティ・オブジェクト・レベルおよびHTTPセッション・レベルのどのバインディングよりも優先されます。現行のHTTP REQUESTスコープ内にある、このDataSourceオブジェクトを使用するすべてのデータ・タグが対象となります。

public interface DataSource {
   public void setDisplayFieldRenderer(AttributeDef attrDef, HTMLFieldRenderer rdr);
   public void setDisplayFieldRenderer(int nIndex, HTMLFieldRenderer rdr);
   public void setEditFieldRenderer(AttributeDef attrDef, HTMLFieldRenderer rdr);
   public void setEditFieldRenderer(int nIndex, HTMLFieldRenderer rdr);
}        

次の例は、 user.CustomRendererというカスタムHTMLレンダラをビジネス・コンポーネントのRenderValueデータ・タグに設定する方法を示しています。JSPページはDataTableComponent.jspです。このJSPページは、DataTableタグによりレコードの表示に使用されます。 <adf:RenderValue>タグで使用するDataSourceオブジェクトに、HTMLレンダラ・オブジェクトを設定する必要があります。この例では、RenderValueタグがdsBrowseというDataSourceオブジェクトを使用しているため、レンダラ・オブジェクトをこのdsBrowseというDataSourceオブジェクトに設定します。


ADF対応Webページでレンダラを使用した作業

 

Copyright © 1997, 2004, Oracle. All rights reserved.