ビジネス・コンポーネント・データ・タグによるデータのレンダリングについて

ビジネス・コンポーネントのデータソース用のHTMLレンダラには、次の2つのタイプがあります。

ビジネス・コンポーネント・データ・タグでは、次のような場合にこれらのHTMLレンダラが使用されます。

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

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

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

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

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

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

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

HTTPセッション・レベルのバインディングは、最も優先順位が低くなりますが、スコープは最も広範です。 Oracle 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. 「終了」をクリックします。入力した内容が、エンティティ・オブジェクトの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. 「終了」をクリックします。入力した内容が、ビュー・オブジェクトのXMLファイルに追加されます。

ビジネス・コンポーネント・データ・タグ・レベルのバインディング

ビジネス・コンポーネント・データ・タグは、データおよび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タグによりレコードの表示に使用されます。RenderValueタグで使用するDataSourceオブジェクトに、HTMLレンダラ・オブジェクトを設定する必要があります。 この例では、RenderValueタグがdsBrowseというDataSourceオブジェクトを使用しているため、レンダラ・オブジェクトをこのdsBrowseというDataSourceオブジェクトに設定します。

 <%@ page language="java" import = "oracle.jbo.html.*" %>
 <%@ taglib uri="/webapp/BC4J data tags.tld" prefix="jbo" %>
 <%
   RequestParameters params = HtmlServices.getRequestParameters(pageContext);
   String appidParam = params.getParameter("appid");
   String voParam = params.getParameter("viewobject");
   String editTargetParam = params.getParameter("edittarget");
   String originURLParam = params.getParameter("originURL");
 %>

 <jbo:DataSource id="dsBrowse" appid="<%=appidParam%>" viewobject="<%=voParam%>"/>
   <%
    oracle.jbo.html.DataSource cacheDS = (oracle.jbo.html.DataSource)
    pageContext.findAttribute("dsBrowse");
    cacheDS.setDisplayFieldRenderer(1, new user.CustomRenderer());
   %>

 <jbo:OnEvent name="delete">
    <jbo:Row id="delrow" datasource="dsBrowse" rowkeyparam="RowKey"
          action="Delete" />
    <jbo:Commit appid="<%=appidParam%>"/>
 </jbo:OnEvent>

 <table class="clsTable" cellspacing="1" cellpadding="3">
   <tr class="clsTableRow">
    <% if (editTargetParam != null && !editTargetParam.equalsIgnoreCase("null"))
       { %>
       <th class="clsTableHeader">&nbsp</th>
       <th class="clsTableHeader"><a href="<jbo:UrlEvent targeturlparam='edittarget'
                 event='Create' datasource='dsBrowse' extraparameters='<%="originURL=" + params.getParameter("originURL")%>'/>">New</a></th> <%
       } %>

    <jbo:AttributeIterate id="df" datasource="dsBrowse">
     <th title="<jbo:ShowHint hintname='TOOLTIP'/>" class="clsTableHeader"><jbo:ShowHint hintname="LABEL">##Column</jbo:ShowHint></th>
    </jbo:AttributeIterate>
   </tr>

   <jbo:RowsetIterate datasource="dsBrowse" changecurrentrow="false" >
    <tr class="clsTableRow">
      <% if (editTargetParam != null && !editTargetParam.equalsIgnoreCase("null"))
         { %>
           <td> <a href="<jbo:UrlEvent targeturlparam='originURL' event='Delete' datasource='dsBrowse' addrowkey='true'/>">Delete</a> </td>
           <td> <a href="<jbo:UrlEvent targeturlparam='edittarget' event='Edit' datasource='dsBrowse' addrowkey='true'
		                               extraparameters='<%="originURL=" + params.getParameter("originURL")%>'/>">Edit</a> </td> <%
         }
      %>
   <jbo:AttributeIterate id="dfv" datasource="dsBrowse">
     <td title="<jbo:ShowHint hintname='TOOLTIP'/>" >
           <jbo:RenderValue datasource="dsBrowse">##Cell</jbo:RenderValue> 
     </td>
    </jbo:AttributeIterate>
    </tr>
   </jbo:RowsetIterate>
 </table>        

ビジネス・コンポーネント・データ・タグについて
ビジネス・コンポーネント・マルチメディア・データ・タグについて

ビジネス・コンポーネント・データ・タグを使用したマルチメディア・コンテンツのレンダリング

 

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