レンダラは、ビジネス・コンポーネント・ドメイン、エンティティ属性またはビュー属性のレベルで定義できるプロパティです。ビジネス・コンポーネント・プロジェクトで定義できるHTMLレンダラには、次の2つのタイプがあります。
NUMBER型やVARCHAR2型などの列型に対応するテキスト属性の場合、デフォルトの表示レンダラはこれらの属性値を文字列として表示します。デフォルトの編集レンダラは、テキスト値の入力に対して<INPUT TYPE="TEXT"> HTMLタグを出力します。
interMediaのORDIMAGE属性に対しては、デフォルトのinterMedia表示レンダラ(oracle.ord.html.OrdBuildURLRenderer
)は、ブラウザにイメージが表示されるように<IMG> HTMLタグを出力します。 デフォルトのinterMedia編集レンダラ( oracle.ord.im.OrdUploadFileRenderer
)は、ファイルのアップロード用に<INPUT TYPE="FILE"> HTMLタグを出力します。その他のinterMedia型の属性に対しては、デフォルトのinterMedia表示レンダラはHTMLアンカー・タグを出力し、デフォルトのinterMedia編集レンダラはファイルのアップロード用に<INPUT TYPE="FILE"> HTMLタグを出力します。
カスタムHTMLレンダラ・クラスを記述し、特定の属性のレンダリングをカスタマイズできます。 カスタムHTMLレンダラ・クラスは、oracle.jdeveloper.html.HTMLFieldRendererImpl
クラスを拡張する必要があります。カスタムHTMLレンダラ・クラスの作成後、レンダリングするビジネス・コンポーネン・ドメインまたは属性にこのレンダラ・クラスをバインドできます。
レンダラと属性のバインディングには、次の6種類があります。
レンダラの影響範囲は各レベルで異なります。ドメイン・クラスを作成してレンダラを設定した場合、そのドメインを使用するすべてのエンティティ・オブジェクトは、自動的にすべてのビュー・オブジェクトにレンダラ・プロパティを伝播します。そのため、属性のレンダリング方法を一元的に指定することができます。エンティティ・オブジェクト属性レベルでレンダラ・プロパティを指定した場合も、同じ結果が得られます。この方法は、1つのエンティティのみにこの設定が必要な場合に便利です。この特別なユーザー・インタフェースが1つのビュー・オブジェクトのみに必要な場合、ビュー・オブジェクト属性レベルでプロパティ値を設定できます。
各レベルのバインディングの優先順位と影響範囲をまとめると、次のようになります。
この中から、レンダラ・クラスをバインドするレベルを必要に応じて選択できます。
HTTPセッション・レベルのバインディング
HTTPセッション・レベルのバインディングは、最も優先順位が低くなります。 ただし影響範囲は最も広範です。 ビジネス・コンポーネントでは、属性タイプに対するデフォルトのバインディングはこのレベルで行われます。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
エンティティ・オブジェクトにphoto
属性がある場合には、ビジネス・コンポーネント・ランタイムはOrdBuildURLRenderer
を使用してphoto
属性をレンダリングします。
エンティティ・オブジェクト・レベルのバインディングを設定するには、次のようにします。
構造ウィンドウに、エンティティ・オブジェクトの属性のリストが表示されます。
Renderer
と入力します。
EditRenderer
と入力します。
user.CustomRenderer
など)を入力します。
DISPLAY_LIST
と入力します。
DISPLAY_LIST
プロパティの場合、<data value>=<display value>,<data value>=<display value>
のように値を指定します。
ビュー・オブジェクト・レベルのバインディング
ビュー・オブジェクト・レベルのバインディングは、エンティティ・オブジェクト・レベルのバインディングより優先されます。 ただし、バインディングの影響範囲はさらに狭くなります。対象となるのは、ビュー・オブジェクトに定義されている属性のみです。
たとえば、Emp1View
とEmp2View
という、Emp
エンティティ・オブジェクトをベースにした2つのビュー・オブジェクトがあるとします。ビュー・オブジェクト・レベルでは、CustomRenderer1がEmp1View
ビュー・オブジェクトのphoto
属性にバインドされているとします。エンティティ・オブジェクト・レベルで、CustomRenderer2がEmp
エンティティ・オブジェクトのphoto
属性にバインドされているとします。photo
属性は、OrdImageDomain型です。 この場合、JSPページでEmp1View
のphoto
属性を表示する際、ビジネス・コンポーネント・ランタイムはCustomRenderer1を使用してOrdImageDomainオブジェクトをレンダリングします。 ただし、Emp2View
ビュー・オブジェクトにphoto
属性がある場合には、ビジネス・コンポーネント・ランタイムはCustomRenderer2を使用してphoto
属性をレンダリングします。
ビュー・オブジェクト・レベルのバインディングを設定するには、次のようにします。
構造ウィンドウに、エンティティ・オブジェクトの属性のリストが表示されます。
Renderer
と入力します。
EditRenderer
と入力します。
user.CustomRenderer
など)を入力します。
DISPLAY_LIST
と入力します。
DISPLAY_LIST
プロパティの場合、<data value>=<display value>,<data value>=<display value>
のように値を指定します。
Data Web Beanレベルのバインディング
Data Web Beanレベルのバインディングは、最も優先順位が高くなります。このレベルのバインディングは、特定のData Web Beanインスタンスのレンダリングのみを制御します。したがって、影響範囲は最も狭くなります。
Data Web Beanに対しては、次のメソッドを使用してHTMLレンダラを設定できます。
public interface DataWebBean extends WebBean {
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);
}
次の例は、ViewCurrentRecordオブジェクトにHTMLレンダラを設定する方法を示しています。
<jsp:useBean id="RowViewer" class="oracle.jbo.html.databeans.ViewCurrentRecord"
scope="request">
<%
RowViewer.initialize(pageContext, "MyProject9_timg1_Timg1Module.TimgView");
RowViewer.setDisplayFieldRenderer(2, new CustomRenderer());
RowViewer.setReleaseApplicationResources(true);
RowViewer.render();
%>
</jsp:useBean>
ビジネス・コンポーネント・データ・タグ・レベルのバインディング
ビジネス・コンポーネント・データ・タグはデータおよび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/DataTags.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"> </th>
<th class="clsTableHeader"><a
href="<%=editTargetParam%>?jboEvent=Create&originURL=<%=originURLParam%>">New</a></th>
<% } %>
<jbo:DefinitionIterate id="df" datasource="dsBrowse">
<th class="vrTableHeader"><jbo:ShowDefinition
definition="name">##Column</jbo:ShowDefinition></th>
</jbo:DefinitionIterate>
</tr>
<jbo:RowsetIterate datasource="dsBrowse" changecurrentrow="false" >
<tr class="clsTableRow">
<% if (editTargetParam != null && !editTargetParam.equalsIgnoreCase("null"))
{ %>
<td class="tablecell"><a
href="<%=originURLParam%>?jboEvent=Delete&RowKey=<jbo:ShowValue
datasource="dsBrowse" dataitem="RowKey"/>">Delete</a></td>
<td class="tablecell"><a href="<%=editTargetParam%>?RowKey=<jbo:ShowValue
datasource="dsBrowse"
dataitem="RowKey"/>&originURL=<%=originURLParam%>">Edit</a></td>
<% } %>
<jbo:DefinitionIterate id="dfv" datasource="dsBrowse">
<td class="tablecell"><jbo:RenderValue
datasource="dsBrowse">##Cell</jbo:RenderValue></td>
</jbo:DefinitionIterate>
</tr>
</jbo:RowsetIterate>
</table
Copyright © 1997, 2004, Oracle. All rights reserved.