ADFクライアントのコントロール・ヒントについて

データ・アクセス・アプリケーションのビジネス層には、データベースからデータを取得したり、クライアントのアプリケーション層での使用のためにデータベースのデータ型をJavaのデータ型へ変換したりする機能が用意されています。また、あらゆるサービス・タイプのデータ項目をすべてのクライアントに一貫した方法で表示するための一元化機能も用意されています。コントロール・ヒントと呼ばれるこのメカニズムにより、サービス・タイプの開発者は次のような利点を得ることができます。

JDeveloperでは、サービス・タイプとの対話やコントロール・ヒントの利用が可能なビルトイン機能により、次のような特定のクライアント・アプリケーションをサポートしています。

ADF Business Componentsのコントロール・ヒント・メカニズム

ビジネス・コンポーネント層は、データベースにアクセスするクライアント・アプリケーションのために協調してトランザクション環境を提供するオブジェクトの集合体です。ビジネス・コンポーネントのクライアントは高レベル層のアプリケーション・モジュール・オブジェクトを介してOracle ADF Business Componentsテクノロジと対話します。データベースへのアクセスを開始する場合、クライアントはアプリケーション・データの状態を定義するアプリケーション・モジュール・インスタンスを取得し、データベースへの接続を提供します。ビジネス・コンポーネント開発者は、各アプリケーション・モジュールに対してビジネス・コンポーネント・プロジェクトで次のオブジェクトを作成します。

これらの基本的な機能の他にも、ビジネス・コンポーネントにはビジネス・コンポーネント層で利用できる様々な機能が用意されています。その1つは、特定の属性値をクライアントのUIでどのように表示するかを定義するコントロール・ヒント情報を格納する機能です。

ビジネス・コンポーネント・プロジェクトでのコントロール・ヒントの使用に関して重要なことは、コントロール・ヒントは定義オブジェクトのプロパティで、他のビジネス・コンポーネントがこれを継承できるという点です。たとえば、開発者がエンティティ・オブジェクト・レベルに設定した任意のコントロール・ヒントのプロパティは、そのエンティティ・オブジェクトを参照するビュー・オブジェクトに反映されます。一方、ビュー・オブジェクト・レベルにコントロール・ヒントを設定し、エンティティ・レベルのコントロール・ヒント・プロパティ定義をオーバーライドすることも可能です。ビュー・オブジェクトでコントロール・ヒント・プロパティを継承およびオーバーライドできるため、ビジネス・コンポーネント開発者は次のようにコンポーネントを開発できます。

コントロール・ヒント・プロパティについて

コントロール・ヒント・メカニズムは、次のコントロール・ヒント・プロパティをサポートします。

コントロール・ヒントの設計時のサポートについて

設計時のコントロール・ヒントのサポートは、次の2つのレベルで用意されています。

設計時のウィザードとダイアログには、属性のコントロール・ヒントを設定および編集するための機能が用意されています。ADF Business Componentsの場合、これはエンティティ・オブジェクトとビュー・オブジェクトの両方に適用されます。属性のコントロール・ヒントを編集するには、構造ウィンドウにデータ・コントロールの構造定義ファイル内の属性を表示し、右クリックして属性エディタで属性を開きます。

ADF Business Componentsの場合、エンティティ属性およびビュー属性エディタでは、コントロール・ヒントは現在の属性のプロパティとして表示されます。「コントロール・ヒント」タブを使用すると、コントロール・ヒント・プロパティを編集できます。「コントロール・ヒント」タブで設定後、「プロパティ」タブをクリックすると属性に追加されたヒントを表示できます。

次の表は、コントロール・ヒント名と、様々なビジネス・コンポーネント・クライアントがそれらのコントロール・ヒントを使用するかどうかを示しています。

ヒント名 JSPページ(「注意」を参照) JSFページ ADF Swing Java UI
ラベル・テキスト

はい

はい

はい

ヒント・テキスト

はい

はい

はい(「注意2」を参照)

書式および書式マスク

はい

はい

はい

ヒントの表示

はい

はい

はい

コントロール・タイプ

はい

はい

いいえ

表示幅および表示高さ

はい

はい

はい

フォーム・タイプ

適用しない

適用しない

はい

注意1: Strutsタグ・ライブラリとJSTLタグを使用して式を評価する入力フォーム・ページでは、コントロール・ヒントはサポートされていません。詳細は、次の項を参照してください。

注意2: ADF Swingアプリケーションでは、基礎となるエンティティ・オブジェクト属性またはビュー・オブジェクト属性について入力されたすべてのヒント・テキストが無視されます。この問題の対処方法として、クライアント・コードにヒント・テキストを設定できます。次の例では、Deptno属性に対するヒント・テキストの設定方法を示しています。

mDeptno.setToolTipText(panelBinding.findCtrlValueBinding("Deptno").getTooltip());

コントロール・ヒントの実行時のサポートについて

現在のところ、Strutsフォームで表示されるJSTLタグを使用して、他のタグの属性に値を提供することはできません。JSP 1.2にはこの制限があるので、Struts入力フォームでは、コントロール・ヒントを使用して入力要素の表示プロパティを設定できません。たとえば、現在のところ、次のコンストラクションはサポートされていません。

<html:text property="EmpName"
    size='<c:out value="${bindings.EmpName.displayWidth}"/>'
/>

JSPページとADFバインディングを使用する場合、次の例に示すようにHTMLタグを使用して、コントロール・ヒントを指定できます。

<textarea name="<c:out value='${bindings.Dname.path}'/>"
          cols="<c:out value='${bindings.Dname.displayWidth}' />"
          rows="<c:out value='${bindings.Dname.displayHeight}' />">
   <c:out value='${bindings.Dname}'/>
</textarea>

JSFページを使用する場合、ADF Facesコンポーネントに対して指定する日付パターン(selectInputDateなど)は、コントロール・ヒントの中で指定した日付書式に一致している必要があります。同じパターンを使用しない場合、実行時エラーが発生します。

実行時のコントロール・ヒントのサポートは、次のように2つのレベルで用意されています。

実行時には、クライアントは属性値を表示する方法を決定するため自動的にコントロール・ヒントを利用します。コントロール・ヒント・プロパティがクライアントでサポートされている場合は(前述の表を参照)、UIのカスタマイズに必要な処理は特にありません。この場合、UIのカスタマイズはビジネス・コンポーネント自身の一元化されたコントロール・ヒントで行われます。

ADF Swing(Java UI)クライアントの場合、UI開発者はコントロール・ヒントAPIにより、コントロール・ヒント定義に直接アクセスできます。コントロール・ヒントは属性オブジェクトのプロパティですが、特定のコントロール・ヒントを取得するためにgetProperty()メソッドを使用する方法はお薦めできません。かわりに、コントロール・ヒントAPIのメソッドの使用をお薦めします。たとえば、UI開発者は次のようにAttributeHintsインタフェースのメソッドを使用して、ラベル、ヒント・テキストおよびコントロール・タイプにアクセスします。

import oracle.jbo.*

ViewObject vo = am.findViewObject("DeptView");
AttributeDef aDef = vo.findAttribute("DeptNo");
LocaleContext locale = am.getSession().getLocaleContext();

String sLabel = aDef.getUIHelper().getLabel(locale);
String sTooltip = aDef.getUIHelper().getTooltip(locale);
Int nControlType = aDef.getUIHelper().getControlType(locale);    

「書式の種類」コントロール・ヒントについて

書式コントロール・ヒントの「書式の種類」および「書式」により、ビジネス・コンポーネント開発者はビジネス・コンポーネントのドメイン・クラスを介して属性フォーマッタを利用できます。ビジネス・コンポーネント・プロジェクトでは、開発者は次の場合にフォーマッタをビジネス・コンポーネントのドメインにマップできます。

各ドメイン・クラスは任意の数のフォーマッタを持つことができます。1つのフォーマッタは任意の数のマスクをサポートできます。属性エディタには、使用可能なフォーマッタと対応する値のマスクのリストが候補として表示されます。使用可能なフォーマッタへのドメイン型のマップは、<jdev_install >/system###/formatinfo.xmlファイルで維持されます。ビジネス・コンポーネント開発者はドメインの作成にドメイン・ウィザードを使用しますが、現在、JDeveloperではformatinfo.xmlファイルでのドメイン・フォーマッタおよびマスクの自動生成はサポートしていません。新規ドメイン型を作成し、その書式を使用可能なフォーマッタのリストに追加する場合、開発者はこのファイルの内容を手作業で編集する必要があります。

実行時には、フォーマッタはユーザー指定値が値のマスク全体またはマスクのRAW書式と一致することを期待します。たとえば、通貨書式の場合、マスクが$0000.00であれば、値$3000.00または3000.00はどちらも有効で、2番目の値は値のマスクのRAW書式に対応します。同じ値のマスクの場合、値$3,000.00(カンマあり)を入力すると「JBO-25009: 型:oracle.jbo.domain.Numberで値:$3,000.00のオブジェクトを作成できません。」という例外が発生することに注意してください。これは、値がリテラル・マスク($0000.00)またはRAW書式(0000.00)と一致しないためです。


ADFクライアントでの表示メタデータの使用
ADFクライアントUIのカスタマイズ
ADFクライアント用のフォーマッタと書式マスクの定義