Oracle® Fusion Middleware Oracle JDeveloperによるWebCenter Portalアセットとカスタム・コンポーネントの開発 12c (12.2.1.2.0) E82735-01 |
|
![]() 前 |
![]() 次 |
この章のトピックは、次のとおりです:
コンポーザは、カスタマイズ可能なアプリケーション・ページを構築するフレームワークを提供します。デフォルトの機能に加えて、コンポーザのフレームワークを拡張し、エンド・ユーザーが使用できる実行時機能を拡張できます。アプリケーションのadf-config.xml
ファイルおよびコンポーザの拡張ファイルpe_ext.xml
で拡張機能を構成する必要があります。これらのファイルの詳細は、「構成ファイル」を参照してください。
この項では、コンポーザの実行時機能を宣言的に拡張するために使用できるオプションについて説明します。次のサブセクションが含まれます:
デフォルトのコンポーザのツールバー(図26-1)には、次のものが含まれています。
ページ・タイトル: 編集モードで開いているページのタイトルを示します。
「ページ・プロパティ」アイコン: 「ページ・プロパティ」ダイアログを開き、ユーザーがホスト・ページのメタデータを編集できるようにします。
「ページのリセット」アイコン: 現在の編集セッションでページに行った変更を元に戻します。
「閉じる」ボタン: 編集モードを終了し、標準UIにユーザーを戻します。
「ページ・プロパティ」および「ページのリセット」アイコンはアドオンの例です。これらのアイコンをクリックして、ページ・プロパティの編集およびページ・カスタマイズのリセットを行うためのパネルを表示します。通常、アドオンは、ページ編集モードの「コンポーザ」ツールバーのアイコンとしてレンダリングされるカスタム・タスク・フローです。「ページ・プロパティ」アドオンと「ページのリセット」アドオンとともに表示されるアドオンを作成できます。たとえば、「コンポーザ」ツールバーに「リビジョン」アイコンが表示されるように、ページ・リビジョン履歴を表示するアドオンを作成できます。このアイコンをクリックするとページのリビジョン履歴が表示されます。「ページ・プロパティ」アドオンと「ページのリセット」アドオンを、作成するカスタム・アドオンと置き換えることもできます。
カスタムのアドオンを構成するプロセスには、タスク・フローを作成し、JARファイルにパッケージ化して、コンポーザ拡張ファイルで定義する作業が含まれます。詳細は、「コンポーザのアドオンの作成」を参照してください。
「コンポーネント・プロパティ」ダイアログには、様々なタブに属性のカテゴリが表示されます。各タブは、プロパティ・パネルと呼ばれます。コンポーザのデフォルトの「コンポーネント・プロパティ」ダイアログは、Oracle JDeveloperの「プロパティ・インスペクタ」に似ています。コンポーネントのカスタム・プロパティ・パネルを作成して登録し、これらにコンポーネント・プロパティを移入し、「コンポーネント・プロパティ」ダイアログのデフォルトのタブとともにこれらをタブとして表示できます。
カスタム・プロパティ・パネルを構成するプロセスには、そのパネルをタスク・フローとして作成し、JARファイルにパッケージ化して、コンポーザ拡張ファイルで定義する作業が含まれます。詳細は、「カスタム・プロパティ・パネルの作成」を参照してください。
「コンポーザ」には、実行時にページを編集するための直感的なユーザー・インタフェースが用意されています。これには、「保存」ボタン、「閉じる」ボタン、「削除」ボタンなどのUIコンポーネントが含まれます。ユーザーが「コンポーザ」でボタンやアイコンをクリックすると、イベント・ハンドラで確実に特定のアクションが実行されます。イベント・ハンドラは、コンポーザのイベントが起動されると、コンポーザによってコールされて戻されるコードです。コンポーザの各UIイベントはイベント・ハンドラと関連付けられています。イベントの起動時に異なる処理または複数の処理を実行して、コンポーザの本来の機能を拡張する必要がある場合があります。たとえば、ユーザーが「保存」をクリックしたとき、デフォルトで「コンポーザ」に用意されている保存動作に加えて、キャッシュした情報のクリーニングやリソースへの接続などの追加のタスクを実行するようにアプリケーションを構成する必要がある場合があります。イベント・ハンドラを使用してこれを実現できます。詳細は、「コンポーザUIイベントのイベント・ハンドラの構成」を参照してください。
リソース・カタログは、ユーザーがページに追加できるリソースを提供します。リソース名の隣の「追加」リンクで、ユーザーはリソースをページに追加できます。コンポーザは、カタログの追加操作を処理するためのドロップ・ハンドラを提供します。デフォルトでは、ドロップ・ハンドラはカタログの各リソースに対して構成されています。リソースへのドロップ処理の完全な制御を提供する場合、そのリソースに追加のドロップ・ハンドラを作成できます。そうすると、「追加」リンクは、リソースをページに追加するための様々なオプションを備えたコンテキスト・メニューを表示します。1つ以上のドロップ・ハンドラを作成し、カタログでリソースの様々なフレーバを処理できます。
次のタイプのドロップ・ハンドラを追加できます。
コンポーザに登録され、ユーザーが「リソース・カタログ」で「追加」リンクをクリックするとコールされるJavaクラス。この場合、リソースは選択したデータ・フレーバに基づくページに追加されます。
コンポーザに登録され、ユーザーが「リソース・カタログ」で「追加」リンクをクリックするとコールされるタスク・フロー。この場合、リソースのどの情報をページに表示する必要があるかをユーザーが決定できるタスク・フローが起動されます。
詳細は、「リソース・カタログのドロップ・ハンドラの構成」を参照してください。
「コンポーネント・プロパティ」ダイアログは、選択したコンポーネントのプロパティを表示します。デフォルトでは、「コンポーザ」は特定のコンポーネント・プロパティをフィルタ処理して、ユーザーにプロパティのサブセットを表示します。フィルタを宣言的に定義して、ユーザーに表示する必要がないプロパティをさらに非表示にしたり、非表示のプロパティを表示したりできます。詳細は、「プロパティ・フィルタの定義」を参照してください。
カスタマイズ・マネージャは、ページやタスク・フローなどのオブジェクトに関するアプリケーションのカスタマイズをユーザーがダウンロード、アップロード、リセットおよび削除できるタスク・フローです。コンポーザの内外のある管理ページ上でカスタマイズ・マネージャを構成できます。カスタマイズ・マネージャの構成および使用の詳細は、「カスタマイズ・マネージャ・タスク・フローのパラメータ・サポートの有効化」を参照してください。
デフォルトの「コンポーザ」ツールバーには、図26-2に示すように、ページ名、「ページ・プロパティ」と「ページのリセット」のアイコン、および「閉じる」ボタンの各要素が表示されます。
要素を追加、削除または再配置してツールバーをカスタマイズできます。既存の要素をカスタム要素でオーバーライドすることも可能です。たとえば、編集しているページの名前をユーザーに表示しない場合、ページ名を表示するメッセージを削除できます。
コンポーザのツールバーのカスタマイズの詳細は、「コンポーザのツールバーのカスタマイズ」を参照してください。
この章で説明する拡張性構成を開始する前に、理解する必要がある2つの重要な構成ファイルがあります。この章で説明するほとんどの拡張機能は、これらのファイルで定義されます。
コンポーザ拡張ファイル(pe_ext.xml
)
コンポーザ拡張ファイル(pe_ext.xml
)では、コンポーザが提供する編集機能を拡張できます。このファイル内で、要素を追加して新しいコンポーザ・アドオンおよびカスタム・プロパティ・パネルを登録し、選択的にパネルをレンダリングし、イベント・ハンドラを登録し、プロパティ・フィルタを定義できます。pe_ext.xml
ファイルは、デフォルトではアプリケーションで使用できません。アドオン、プロパティ・パネルまたはイベント・ハンドラなどのタスクを初めて実行するときにこのファイルを作成する必要があります。このファイルをプロジェクトのWebコンテキスト・ルートの下のMETA-INF
ディレクトリまたはapplication_home
/
project
/src/META-INF
ディレクトリに作成します。アプリケーションを実行するとき、pe_ext.xml
ファイルは、アプリケーションのクラスパスに含まれているJARファイルから取得されます。アプリケーションには複数の拡張ファイルを含めることができます。ただし、拡張ファイルを含むJARがアプリケーションのクラスパスで使用でき、pe_ext.xml
ファイルが処理のために取得されるようにする必要があります。META-INF
フォルダにpe_ext.xml
が含まれている各JARが処理され、コンポーザの拡張機能がロードされて結合されます。コンポーザの機能を拡張するためにpe_ext.xml
で定義できる様々な要素の詳細は、「pe_ext.xml」を参照してください。
アプリケーションのadf-config.xml
ファイル
adf-config.xml
ファイルは、通常デプロイ時に決定され、実行時に変更されることがあるアプリケーション・レベルの設定を指定します。コンポーザでの新しいアドオンおよびカスタム・プロパティ・パネルの登録や、カスタマイズ・レイヤーの作成などのタスクを実行するときには、adf-config.xml
ファイルに適切なエントリを追加する必要があります。adf-config.xml
ファイルはアプリケーションを作成するときに自動的に作成され、Page Customizable
コンポーネントをページに追加すると特定の構成がこのファイルに追加されます。
adf-config.xml
で設定できるコンポーザ固有の構成の詳細は、「adf-config.xml」を参照してください。
コンポーザには、実行時編集のために次のデフォルトのアドオンが用意されています。
ページ・プロパティ
このダイアログは、「コンポーザ」ツールバーの「ページ・プロパティ」アイコンをユーザーがクリックすると開きます。「ページ・プロパティ」ダイアログは、現在のページのプロパティを表示し、ユーザーはプロパティ値を変更できます。
ページのリセット
このダイアログは、「コンポーザ」ツールバーの「ページのリセット」アイコンをユーザーがクリックすると開きます。「ページのリセット」ダイアログでは、ユーザーはページに対して作成されたアプリケーションのカスタマイズを削除し、これを以前に保存したバージョンまたは元のデフォルトの状態にリセットできます。詳細は、「ページのリセット」を参照してください。
これらに加えて、コンポーザに新規アドオンを登録できます。たとえば、「コンポーザ」ツールバーに「リビジョン」アイコンが表示されるように、ページ・リビジョン履歴を表示するアドオンを作成できます。このアイコンをクリックするとページのリビジョン履歴が表示されます。
この項には次のサブセクションが含まれます:
「コンポーザ」ツールバーにあるアイコンから起動できるカスタム・タスク・フローを作成および登録できます。登録されたすべてのアドオンに、ツールバーに表示される関連アイコンがあります。
この項では、アドオンを作成して、コンポーザに登録する手順を順を追って説明します。ここには、アプリケーションに関する情報を表示するアドオンの作成方法を示す例が含まれています。この例のアドオンでは、「コンポーザ」ツールバーに「情報」アイコンをレンダリングします(図26-3)。ユーザーは、このアイコンをクリックすることで、アプリケーションの情報を含むタスク・フローを起動できます。
この項には次のサブセクションが含まれます:
コンポーザのアドオンは、JSPXページまたはページ・フラグメントを使用して作成するタスク・フローです。
アドオンを作成するには:
アプリケーション・プロジェクトで、custompanelview.jsff
というJSFFファイルを作成します。
「file」メニューから、「新」を選択します。
「新規ギャラリ」ダイアログで、「Web層」を展開し、「JSF」を選択してから「JSFページ」またはJSFフラグメントを選択します。
「OK」をクリックします。
次の例に示したものと同様のコードを追加してフラグメントを設計します。
<?xml version='1.0' encoding='UTF-8'?>
<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.1"
xmlns:af="http://xmlns.oracle.com/adf/faces/rich">
<af:panelGroupLayout id="pnlgrp1" layout="vertical" halign="center">
<af:spacer id="sp1" height="20" />
<af:image id="customimage" source="/images/DemoLogo.jpg"
shortDesc="Demo Logo"/>
<af:spacer id="sp2" height="20"/>
<af:outputText id="output1" value="This is a sample shopping cart application based on Oracle ADF Framework.
It also uses the Oracle WebCenter Portal
Framework to enable collaboration, application customization and user customization features."/>
<af:spacer id="sp3" height="20"/>
<af:outputText id="output2" value="Build : 11.1.1"
inlineStyle="font-weight:bold;"/>
</af:panelGroupLayout>
</jsp:root>
注意:
実行時、アドオン・パネルは、このフラグメントのコンテンツに合うように自動的にサイズ設定されます。
custom-panel-task-flow
というタスク・フロー定義を作成します。
「ファイル」メニューから「新規」を選択します。
「新規ギャラリ」ダイアログで、「Web層」を展開し、「JSF」、「ADFタスク・フロー」の順に選択します。
「OK」をクリックします。
タスク・フロー定義に作成したcustompanelview.jsff
フラグメントをドロップします。
関連項目:
詳細は、『Oracle Fusion Middleware Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』のADFタスク・フローの概説に関する項を参照してください。
タスク・フロー定義ファイルを保存します。
(オプション)1つのアプリケーションでタスク・フローを作成し、これを別のアプリケーションで使用する場合、まずADFライブラリでこのタスク・フローをパッケージ化し、使用するアプリケーションに結果として得られるJARを追加する必要があります。
ADFライブラリでタスク・フローをパッケージ化するには:
タスク・フローのデプロイメント・プロファイルを作成します。
「ポータル」プロジェクトを右クリックし、「新規」を選択します。
「新規ギャラリ」で、「一般」を開き、「デプロイメント・プロファイル」、「ADFライブラリのJARファイル」の順に選択して「OK」をクリックします。
「デプロイメント・プロファイルの作成 -- ADFライブラリJARファイル」ダイアログで、デプロイメント・プロファイルの名前を入力して「OK」をクリックします。
「ADFライブラリJARデプロイメント・プロファイルのプロパティ」ダイアログで「OK」をクリックします。
「プロジェクト・プロパティ」ダイアログで、「OK」をクリックします。
アプリケーション・ナビゲータで、プロジェクト・フォルダを右クリックして、「デプロイ」、デプロイメント・プロファイル名の順に選択します。
「デプロイ」ダイアログで、「ADFライブラリのJARファイルへのデプロイ」を選択します。
「終了」をクリックします。
こうすることによって、JARファイルを含むdeployフォルダが<
Application_Root
>\Portal\deploy\
にあるプロジェクト・フォルダに作成されます。
アドオンを使用する任意のアプリケーションにこのJARファイルを追加できます。
タスク・フローを作成したら、コンポーザに登録して、デフォルトのオプションとともにコンポーザ・ツールバーに表示されるようにする必要があります。
コンポーザにアドオンを登録するには:
コンポーザ拡張ファイルがまだ存在していない場合は、このファイル(pe_ext.xml
)をプロジェクトのWebコンテキスト・ルート(たとえば、APPLICATION_HOME
\Portal\src\META-INF
ディレクトリ)の下のMETA-INF
ディレクトリに作成します。
「file」メニューから、「新」を選択します。
「新規ギャラリ」ダイアログで、「一般」を展開し、「XML」、「XML文書」の順に選択します。
「OK」をクリックします。
ファイルの名前をpe_ext.xml
にします。
ファイルの<addon-config>
要素をネストされた<panels>
要素とともに追加します。
アドオンとして登録する各タスク・フローに1つの<panel>
要素を追加します。
拡張ファイルの<panels>
要素には、パネルを必要な数だけ宣言できます。
次の例は、<panel>
エントリを備えた拡張ファイルのコードを示しています。
<?xml version="1.0" encoding="US-ASCII" ?> <pe-extension xmlns="http://xmlns.oracle.com/adf/pageeditor/extension"> <addon-config> <panels> <panel name="oracle.custom.panel" title="About" icon="http://myforums.oracle.com/jive3/images/question-pts-available-16x16.gif" taskflow-id="/WEB-INF/custom-panel-task-flow.xml#custom-panel-task-flow" /> </panels> </addon-config> </pe-extension>
addon-config
および他のネストされた要素の詳細は、「pe_ext.xml」を参照してください。
(オプション)次の例に示すようにevent-handlers
要素をpanel
要素内に追加して、カスタム・パネルにイベント・ハンドラを登録します。
<event-handlers> <event-handler event="close"> oracle.custom.TaskFlowEventHandler </event-handler> </event-handlers>
詳細は、「コンポーザUIイベントのイベント・ハンドラの構成」を参照してください。
pe_ext.xml
ファイルを保存します。
アドオンを登録するには、これへの参照をアプリケーションのadf-config.xml
ファイルに追加する必要があります。addon-panels
エントリを追加して新しいアドオンを定義します。
アドオンをadf-config.xml
ファイルに登録するには:
adf-config.xml
で設定できるコンポーザ固有の構成の詳細は、「adf-config.xml」を参照してください。
「ページ・プロパティ」、「ページのリセット」および「カスタマイズ・マネージャ」の各アイコンをコンポーザ・ツールバーに表示することも非表示することもできます。これらのアドオンのいずれかを非表示にするには、<pe:addon-panels>
のshow-default-addons
属性をtrue
に設定し、非表示にするデフォルトのアドオンのエントリを追加し、そのアドオンのrendered
属性をfalse
に設定する必要があります。
次の例は、「ページ・プロパティ」アドオンを非表示にするコードを示しています。
<pe:addon-panels show-default-addons="true"> <!-- Hide the Reset Page add-on --> <pe:addon-panel name="oracle.adf.pageeditor.addonpanels.page-reset" rendered="false"/> . . . </pe:addon-panels>
除外されたアドオン(「ページのリセット」)は、コンポーザ・ツールバーに表示されません。他のデフォルトのアドオンはデフォルトの順序でツールバーに表示されます。
カスタマイズ・マネージャは、タスク・フロー、ページおよび指定したページのページ・フラグメントのアプリケーションのカスタマイズをユーザーが管理できるコンポーザのアドオンです。詳細は、「アプリケーションのカスタマイズの管理」を参照してください。
カスタマイズ・マネージャのアドオンは、コンポーザのライブラリで使用できますが、デフォルトではレンダリングされません。これを有効にするには、次の例に示すように、<pe:page-editor-config>
内部の<pe:addon-panel>
要素を使用してアプリケーションのadf-config.xml
ファイルでこれを構成します。
<pe:page-editor-config xmlns="http://xmlns.oracle.com/adf/pageeditor/config">
<pe:addon-panels show-default-addons="true">
<pe:addon-panel name="oracle.adf.pageeditor.addonpanels.customization-manager"/>
. . .
</pe:addon-panels>
. . .
</pe:page-editor-config>
この構成を行うと、図26-6に示すように、コンポーザ・ツールバーに「カスタマイズ・マネージャ」アイコンが表示されます。
ビジネス要件に応じて、様々なユーザーがコンポーザで使用できるアドオンを選択的に非表示にすることが必要になる場合があります。アドオンを選択的に非表示にするには、次の例に示すように、<pe:addon-panels>
のshow-default-addons
属性をtrue
に設定し、非表示にするデフォルトのアドオンのエントリを追加し、EL式を使用してそのアドオンのrendered
属性をfalse
にする必要があります。
<pe:page-editor-config xmlns="http://xmlns.oracle.com/adf/pageeditor/config"> <pe:addon-panels show-default-addons="true"> <pe:addon-panel name="oracle.adf.pageeditor.addonpanels.page-reset" rendered="#{securityBean.userInPageResetRole}" /> . . . </pe:addon-panels> . . . </pe:page-editor-config>
この例では、securityBean
バッキングBeanは、ログイン・ユーザーのロールに応じてtrue
またはfalse
のいずれかを返します。返された値がfalse
の場合、コンポーザはコンポーザ・ツールバーに「ページのリセット」アイコンを表示しません。true
の値が返された場合、コンポーザは「ページのリセット」アイコンを表示します。
注意:
コンポーザのツールバーで「ページのリセット」アイコンを非表示にすると、タスク・フローのコンテンツの編集中に表示される「タスク・フローのリセット」アイコンも非表示になります。
rendered
のデフォルト値はtrue
です。つまり、アドオンにrendered
属性を指定しないと、そのアドオンは常に表示されます。
ユーザーがコンポーネントの「編集」アイコンをクリックすると、コンポーザは「コンポーネント・プロパティ」ダイアログにコンポーネントのプロパティを表示します。「コンポーネント・プロパティ」ダイアログには、一連のタブが用意されています。各タブは、関係する属性のグループを表示します。属性には、コンポーネントの動作および視覚的スタイルのプロパティを制御する関連値があります。たとえば、「スタイル」タブは、幅、高さ、背景色などのコンポーネントのスタイル関係のプロパティを表示します。
同様に、ユーザーが「ページ・プロパティ」アイコンをクリックすると、「ページ・プロパティ」ダイアログが独自の一連のタブとともに開きます。これらのタブには、表示関連のページ・プロパティ、ページ・パラメータおよびセキュリティ設定が含まれています。
「コンポーネント・プロパティ」ダイアログまたは「ページ・プロパティ」ダイアログに表示されるタブとともにレンダリングするカスタム・プロパティ・パネルを作成して登録できます。また、デフォルトのパネルの削除やカスタム・プロパティ・パネルへの置換も行えます。たとえば、Source
プロパティのピッカーを表示することによってImage
コンポーネントのよりフレンドリなプロパティ・パネルを開発できます。こうすることによって、ユーザーは使用可能なオプションからイメージを容易に選択できるようになります。
この項では、カスタム・プロパティ・パネルの作成方法を説明します。デフォルトのプロパティ・パネルを除外、オーバーライドおよび選択的にレンダリングする方法も説明します。次のサブセクションが含まれます:
カスタム・プロパティ・パネルの作成は、アドオンの作成と似ています。つまり、カスタム・プロパティ・パネルをタスク・フローとして作成して、コンポーザ拡張ファイルで登録するということです。ただし、コンポーザのアドオンはadf-config.xml
ファイルのaddon-panels
要素を使用して構成されますが、カスタム・プロパティ・パネルは拡張ファイル自体のproperty-panels
要素を使用して構成されます。
カスタム・プロパティ・パネルを構成して、常に「コンポーネント・プロパティ」ダイアログに表示できます。または、パネルを構成して、特定のコンポーネントまたはタスク・フローが編集のために選択されたときのみ表示することも可能です。
この項では、カスタム・プロパティ・パネルを作成および登録する方法を説明します。次のサブセクションが含まれます:
プロパティ・パネルには、ページまたはコンポーネントのプロパティを編集する方法が用意されています。たとえば、ユーザーは、選択したタスク・フローで「編集」アイコンをクリックし、そのパラメータ値を変更し、「コンポーネント・プロパティ」ダイアログでその視覚的属性を変更できます。
コンポーザを使用すると、プロパティ・パネルをコンポーネントおよびタスク・フローと関連付けることができます。ユーザーがコンポーネントまたはタスク・フローの「編集」アイコンをクリックすると、コンポーザは「コンポーネント・プロパティ」ダイアログを開き、オブジェクトと関連付けたカスタム・プロパティ・パネルをデフォルトのプロパティ・パネルとともに表示します。
カスタム・プロパティ・パネルを作成して、コンポーザ拡張ファイルで宣言する手順は、コンポーザのアドオンを作成して宣言する手順と似ています。詳細は、「アドオン・タスク・フローの作成」および「コンポーザへのアドオンの登録」を参照してください。
次の例は、pe_ext.xml
ファイルでのサンプル・プロパティ・パネルの宣言を示しています。
<pe-extension xmlns="http://xmlns.oracle.com/adf/pageeditor/extension"> <addon-config> <panels> <panel name="sample-panel" title="Sample Panel" taskflow-id="/WEB-INF/sample_task_flow.xml#sample_task_flow"/> </panels> </addon-config> </pe-extension>
カスタム・パネルを作成して、pe_ext.xml
ファイルで宣言した後で、次の例に示すように、<property-panels>
要素を使用して構成する必要があります。こうすることによって、パネルは、コンポーザの「コンポーネント・プロパティ」ダイアログと「ページ・プロパティ」ダイアログに自動的に表示されます。
<addon-config> <panels> . . . </panels> <property-panels> <property-panel name="samplepanel"> <panel name="sample-panel" rendered="true"/> </property-panel> </property-panels> </addon-config>
1つの<panel>
要素を使用して、各カスタム・パネルを登録します。<panel>
は、「コンポーネント・プロパティ」ダイアログのタブに対応します。任意の数の<panel>
要素を追加できます。
拡張ファイルにカスタム・パネルを登録するとき、パネルをコンポーネントまたはタスク・フローと関連付けることができます。カスタム・プロパティ・パネルはそのコンポーネントまたはタスク・フローに対してのみレンダリングされます。この項では、特定のコンポーネントに対してプロパティ・パネルを登録する方法を説明します。
コンポーネントに対してプロパティ・パネルを登録するには:
タスク・フローのカスタム・プロパティ・パネルは、コンポーザ拡張ファイルに登録することで定義できます。次の例は、タスク・フローへのカスタム・プロパティ・パネルの登録に使用されるサンプル・コードを示しています。
特定のタスク・フローに対して登録されたカスタム・プロパティ・パネルは、これが関連付けられたタスク・フローが選択された場合のみ表示されます。それ以外の場合には、デフォルトのプロパティ・パネルが表示されます。
注意:
タスク・フロー固有のカスタム・プロパティ・パネルは、タスク・フロー・パラメータまたはタスク・フローの動作と関係のあるその他の側面をカスタマイズする際にのみ使用します。
カスタム・プロパティ・パネルは、Oracle JSF Portlet Bridgeを使用してレンダリングされたタスク・フローに関連付けられている場合には動作しません。
タスク・フローに対してプロパティ・パネルを登録するには:
カスタム・プロパティ・パネルを特定のコンポーネントまたはタスク・フローと関連付けた場合、実行時このパネルは、指定したコンポーネントまたはタスク・フローから起動した「コンポーネント・プロパティ」ダイアログでタブとしてレンダリングされます。カスタム・プロパティ・パネルを特定のコンポーネントまたはタスク・フローと関連付けなかった場合、実行時このカスタム・プロパティ・パネルは、すべてのページ、コンポーネントおよびタスク・フローに対して「ページ・プロパティ」ダイアログと「コンポーネント・プロパティ」ダイアログの両方でタブとしてレンダリングされます。
注意:
「コンポーネント・プロパティ」ダイアログおよび「ページ・プロパティ」ダイアログで、カスタム・パネルは、タスク・フローを含むタブ・コンポーネントによってサイズ設定されます。タブ・コンポーネント自体のサイズは、現在適用されているスキンのルールによって決まります。このルールはaf|panelTabbed.Tab
をコールされます。
コンポーザの「コンポーネント・プロパティ」ダイアログは、デフォルトで次のパネルを表示します: 「表示オプション」、「子コンポーネント」、「イベント」、「スタイル」、「コンテンツ・スタイル」および「パラメータ」。pe_ext.xml
ファイルでカスタム・パネルを宣言および登録するときにデフォルトのパネルの名前を使用して特定のパネルをオーバーライドできます。デフォルトのパネルの詳細は、「コンポーザのデフォルト・アドオンとプロパティ・パネル」を参照してください。
次の例は、「表示オプション」パネルをcustom-panel-task-flow
というタスク・フローを使用して定義したパネルで上書きするコードを示しています。
グローバル・パネルは、同じ名前(oracle.adf.pageeditor.prop-panel.global-panes
)でカスタム・パネルを登録することでオーバーライドできます。ただし、グローバル・パネル名でカスタム・パネルを登録すると、デフォルトの3つのタブが「コンポーネント・プロパティ」ダイアログにレンダリングされなくなります。デフォルトのタブがカスタムのタブとともにレンダリングされるようにするには、デフォルトのタブを明示的に追加しなおすことが必要です。
次の例は、カスタム・パネルでグローバル・プロパティ・パネルをオーバーライドしながら、「表示オプション」タブも表示されるようにする方法を示しています。
<property-panels>
<property-panel name="oracle.adf.pageeditor.prop-panel.global-panes">
<panel name="oracle.adf.pageeditor.pane.generic-property-inspector"
rendered="true"/>
<panel name="custom-resource-editor"
rendered="true"/>
</property-panel>
</property-panels>
<addon-config> <panels> <panel name="oracle.adf.pageeditor.pane.generic-property-inspector" title="Sample Panel" icon="http://myforums.oracle.com/jive3/images/question-pts-available-16x16.gif" taskflow-id="/WEB-INF/custom-panel-task-flow.xml#custom-panel-task-flow" /> </panels> <property-panels> <property-panel name="samplepanel"> <panel name="oracle.adf.pageeditor.pane.generic-property-inspector" rendered="true"/> </property-panel> </property-panels> </addon-config>
即時利用可能な、すべてのデフォルトのプロパティ・パネルは、構成したカスタム・プロパティ・パネルとともに表示されます。「ページ・プロパティ」ダイアログまたは「コンポーネント・プロパティ」ダイアログでデフォルトのプロパティ・パネルを非表示にするために、そのパネル専用の行を追加し、rendered
属性をfalse
に設定できます。
次の例は、Command Button
コンポーネントの「コンテンツ・スタイル」プロパティ・タブがfalse
に設定されたrendered
属性を示しています。デフォルトのプロパティ・パネルの詳細は、「コンポーザのデフォルト・アドオンとプロパティ・パネル」を参照してください。
<pe-extension xmlns="http://xmlns.oracle.com/adf/pageeditor/extension">
<addon-config>
<property-panels>
<property-panel name="cmdbtn">
<component>oracle.rich.CommandButton</component>
<panel name="prop.panel.cmdbtn" />
<panel name="oracle.adf.pageeditor.pane.content-style-editor" rendered="false" />
</property-panel>
</property-panels>
</addon-config>
. . .
</pe-extension>
アプリケーションに登録されたカスタム・プロパティ・パネルは、指定したコンポーネントの「編集」アイコンをユーザーがクリックすると、「コンポーネント・プロパティ」ダイアログにレンダリングされます。アプリケーションを構成して、ログイン・ユーザーのロール、表示中のページなどの異なる条件に基づいてプロパティ・パネルを選択的にレンダリングできます。プロパティ・パネルを選択的に表示するために、次の例に示すように、property-panel
のrendered
属性のEL値を使用できます。
<property-panel name="global-but-just" rendered="#{bean.showProperty}">
コンポーネントのカスタム・プロパティ・パネルを構築する場合、コンポーザ・タグ・ライブラリから使用可能なShow Property
コンポーネントを使用して、カスタム・パネルにコンポーネントの属性を表示できます。カスタム・パネル・タスク・フローを定義するページ・フラグメントで、表示する各属性に対して1つのShow Property
コンポーネントを追加する必要があります。Show Property
は、(カスタム・パネルを作成した)コンポーネントまたはタスク・フローのプロパティ値を読み取る宣言型コンポーネントで、カスタム・パネルにそのプロパティの入力フィールドを表示します。ユーザーは、入力フィールドを使用してパネルのプロパティ値を編集できます。
カスタム・パネルの詳細は、「カスタム・プロパティ・パネルの作成」を参照してください。
Show Property
コンポーネントを追加するには:
Show Property
コンポーネントをドラッグ・アンド・ドロップします。 Show Property
コンポーネントに属性を設定します。注意:
コンポーザの外側のページでもShow Property
コンポーネントを使用できます。
Show Detail Frame
コンポーネント内に含まれている天気ウィジェットの例を考えてみます。カスタム・プロパティ・パネルが作成され、ユーザーは、天気ウィジェットのText、Auto RefreshおよびRefresh Intervalの各属性を編集できます。これには、ユーザーがこれらの属性に値を指定するための3つのフィールドがあります。ユーザーが天気ウィジェットの3つの属性を設定できるようにするために、パネルで表示する各属性に1つのShow Property
コンポーネントが追加されます。実行時にユーザーが天気ウィジェットを編集すると、「コンポーネント・プロパティ」ダイアログは、図26-7に示すように3つの属性を含むカスタム・パネルを表示します。
図26-7 Show Detail Frameコンポーネント・プロパティを表示するカスタム・パネル
天気ウィジェットは、次の例に示すようにPoll
コンポーネントとともにページで使用されます。
<cust:showDetailFrame text="Weather" id="sdf1" contentStyle="height:220.0px;" partialTriggers="p1"> <af:region value="#{bindings.weathertaskflowdefinition1.regionModel}" id="r1"/> <af:poll id="p1" interval="60000"/> </cust:showDetailFrame>
Poll
コンポーネントは、リフレッシュされたコンテンツを天気ウィジェットに一定間隔で送信するために使用されます。デフォルトの間隔は60000ミリ秒です。
カスタム・パネルには、3つのpanelLabelandMessage
コンポーネントが含まれ、Text
、Auto Refresh
およびRefresh Interval
の各属性の入力フィールドが用意されています。このパネルのフィールドは次のように実装されます。
showProperty
コンポーネントは、次の例に示すように各panelLabelandMessage
コンポーネントに追加されます。
<!-- Input field for setting the Text attribute, which displays on the component header --> <af:panelLabelAndMessage label="Text" id="plam2"> <pedc:showProperty label="Text" id="sp1" simple="true" value="#{sdfCustomPanel.text}"/> </af:panelLabelAndMessage> <!-- Checkbox to enable auto refresh, which controls whether the widget must be refreshed --> <af:panelLabelAndMessage label="Auto Refresh" id="plam3"> <pedc:showProperty label="Auto Refresh" id="sp2" simple="true" type="boolean" autoSubmit="true" value="#{sdfCustomPanel.autoRefresh}"/> </af:panelLabelAndMessage> <!-- LOV to display values for Refresh Interval when auto refresh is enabled --> <af:panelLabelAndMessage label="Refresh Interval" id="plam4"> <pedc:showProperty label="Refresh Interval" id="sp3" simple="true" type="list" disabled="#{!sdfCustomPanel.autoRefresh}" value="#{sdfCustomPanel.refreshInterval}" selectItems="#{sdfCustomPanel.selectItems}" binding="#{sdfCustomPanelRequestBean.refreshIntervalShowProp}"/> </af:panelLabelAndMessage>
ここで、sdfCustomPanel
は、マネージドBeanであるSDFCustomPanelBean.java
を参照します。
カスタム・パネルのタスク・フロー定義には、Beanへの参照が含まれています。
<managed-bean id="mb1">
<managed-bean-name id="mb1_name">sdfCustomPanel</managed-bean-name>
<managed-bean-class id="mb1_class">portal.weather.panel.SDFCustomPanelBean</managed-bean-class>
<managed-bean-scope id="mb1scope">session</managed-bean-scope>
</managed-bean>
SDFCustomPanelBean.java
Beanには、パネルに表示される様々な属性の値を処理するロジックが用意されています。Beanでは、SelectionContext
APIは、次のように各属性の値を読み書きするために使用されます。
選択したコンポーネント、つまりプロパティが表示されるコンポーネントを保持します。この例では、Show Detail Frame
コンポーネントが天気ウィジェットとしてその内部に含まれます。
選択したコンポーネントの属性値を読み取ります。
ユーザーが指定した属性値を取得し、その値をコンポーネント属性に設定します。
たとえば、Refresh Interval
属性は、Auto Refresh
が選択された場合のみ有効で、マネージドBeanで定義された値を含むドロップダウン・メニューを表示します。ページのPoll
コンポーネントは、Show Property
コンポーネントにワイヤリングされ、ウィジェットのリフレッシュがShow Propertyコンポーネントの値によって行われるようになります。Refresh Interval
プロパティの値を処理するコードは次のとおりです。
. . . /** Set the refresh interval attribute value on the component public void setRefreshInterval(String _refreshInterval) { this._refreshInterval = _refreshInterval; } **/ public String getRefreshInterval() { if (_autoRefresh == true && _refreshInterval != null) return _refreshInterval; // Get hold of the component whose properties you want to edit SelectionContext selCtx = Context.getCurrentInstance().getSelectionContext(); UIComponent selComp = selCtx.getSelectedComponent().getUIComponent(); if (selComp instanceof ShowDetailFrame) { // Get the refresh interval value specified for the Poll component RichPoll pollComp = (RichPoll) selComp.findComponent("p1"); if (_autoRefresh == false) _refreshInterval = "Refresh interval not applicable"; else if (pollComp.getInterval() < 0) _refreshInterval = "60000"; else _refreshInterval = Integer.toString(pollComp.getInterval()); } return _refreshInterval; } . . . public List<SelectItem> getSelectItems() { return _selectItems; } . . . private static List<SelectItem> _selectItems; static { _selectItems = new ArrayList<SelectItem>(); SelectItem si = new SelectItem("60000", "1 Minutes"); _selectItems.add(si); si = new SelectItem("120000", "2 Minutes"); _selectItems.add(si); si = new SelectItem("180000", "3 Minutes"); _selectItems.add(si); }
ユーザーがRefresh Interval
プロパティの値を選択し、「コンポーネント・プロパティ」ダイアログで「適用」をクリックすると、保存リスナーがコールされ、保存
イベント・ハンドラによって値がBeanに戻されて保存されます。保存イベント・ハンドラの実装の関連コードは次のとおりです。
public void save() { . . . if (_autoRefresh) { aa = new AttributeComponentChange("interval", Integer.parseInt(_refreshInterval)); changeManager.addComponentChange(context, pollComp, aa); aa.changeComponent(pollComp); } else { aa = new AttributeComponentChange("interval", new Integer(-1)); changeManager.addComponentChange(context, pollComp, aa); aa.changeComponent(pollComp); } }
「コンポーネント・プロパティ」ダイアログの「パラメータ」タブおよび「表示オプション」タブのすべてのプロパティは、式言語(EL)式を取ることができます。このようなパラメータで使用できる「式ビルダー」オプションは、図26-8に示すように単純に式ビルダーである「編集」ダイアログを開きます。式ビルダーは、取得可能だが取得できない場合には未知である値が必要な場合(たとえば、値を現在のユーザーまたは現在のアプリケーション・スキンの名前にする場合)に特に便利です。
式ビルダーをカスタマイズして、コンポーザ拡張ファイルpe_ext.xml
に必要なエントリを作成することでオプションを増やすことができます。また、コンポーザは、ELを無効化するように構成することも、既存のELが上書きされないように構成することもできます。
この項では、式ビルダーを拡張してカスタム機能を追加する方法を説明します。次のサブセクションが含まれます:
カスタム・オプションを式の値のドロップダウン・リストに追加することによって、式ビルダーを拡張できます。カスタム・オプションを定義し、pe_ext.xml
ファイルに含める必要があります。追加する新しい各オプションに対して、<selector>
要素を定義し、これをpe_ext.xml
ファイルに含める必要があります。
コンポーザ拡張ファイルでカスタム・オプションを構成するには:
コンポーザは、アプリケーションまたは特定の.jspx
ページでELを無効化するように構成することも、既存のELを上書きから保護するように構成することもできます。これは、「「デザイン」ビューまたは「コンテンツの追加」ビューでの直接選択の有効化」で説明しているように、エンド・ユーザーに要素を公開する際に特に役立ちます。
アプリケーションの設定を定義するには、<pe:page-editor-config>
タグ内のadf-config.xml
の次の要素を変更します。
<pe:allow-el>
は、コンポーネント・プロパティに対してELの入力が可能かどうかを定義します。デフォルトはtrue
です。ELがすでにプロパティに対して定義されている場合、これを変更することはできません。
<pe:protect-el>
は、フォーム要素のELが読取り専用であるかどうかを定義します。デフォルトは、false
です。ELがすでに定義されていて、コンポーネントが別のレベルで編集されている場合は、ELを変更することはできません。
特定の.jspx
ページの動作を定義するには、<pe:pageCustomizable>
タグ内の次の要素を使用します。
allowEL
(boolean)は、ELがアプリケーション・ページで実行できるかどうかを定義します。デフォルトはtrue
です。ELがすでにプロパティに対して定義されている場合、これを変更することはできません。
protectEL
(boolean)は、フォーム要素のELが読取り専用であるかどうかを定義します。デフォルトは、false
です。ELがすでに定義されていて、コンポーネントが別のレベルで編集されている場合は、ELを変更することはできません。
.jspx
ページで定義された設定は、adf-config.xml
で定義された設定より優先されます。
通常、コンポーザでタスク・フローのパラメータを編集中に、ユーザーは「コンポーネント・プロパティ」ダイアログにあるテキスト・ボックスに値を入力します。しかし、ユーザーが特定のフィールドに指定する値について混乱することが多いです。これを推測のままにしておくのではなく、各パラメータが取ることができる値がわかっている開発者は、可能な場合には有効なすべてのオプションをリストすることによってユーザーが容易に操作できるようにすることができます。コンポーザを構成して、値のリスト(LOV)またはピッカーを任意のパラメータに対して表示できます。
次のオプションを使用して事前定義された一連のパラメータ値を表示できます。
静的LOV
事前定義された値のリストを表示します。
動的LOV
ページが実行されているときに計算されるEL値を評価して生成される値のリストを表示します。
グローバルLOV
アプリケーションの任意のタスク・フローで使用できる値のグローバル・リストを表示します。
ピッカー
ピッカー・フォーマット(たとえば、ドキュメント・ピッカー)ですべての値を表示します。
この項では、様々なタイプのLOVをタスク・フローのパラメータ用に構成する方法を説明します。次のサブセクションが含まれます:
単純な天気タスク・フローの例
この項の手順の一部は、図26-9に示すように、選択した都市の天気の情報を表示する単純な天気タスク・フロー(weather-task-flow-definition
)の例を使用します。
このタスク・フローには、選択した都市の天気の詳細を選択した温度単位(華氏または摂氏)で表示するようにそれぞれをユーザーが変更できる2つのパラメータ(zipCode
とtempUnits
)が用意されています。この天気タスク・フローの例は、次のタイプのLOVを構成する方法を説明するために使用します。
図26-10
に示すような、tempUnits
パラメータの値Celsius
およびFahrenheitを持つ静的LOV。
都市名または郵便番号をユーザーが指定して対応する詳細を天気タスク・フローに表示できる2つのフィールドを持つピッカー(図26-11)。
または、実行時に評価されるEL値に基づいて値を表示するzipCode
パラメータの動的LOV(図26-12)。
天気タスク・フローには、次の例に示すコードを備えたタスク・フロー定義ファイル(weather-task-flow-definition.xml
)が含まれています。
<?xml version="1.0" encoding="US-ASCII" ?> <adfc-config xmlns="http://xmlns.oracle.com/adf/controller" version="1.2"> <task-flow-definition id="weather-task-flow-definition"> <default-activity id="defaultactivity1">weather</default-activity> <input-parameter-definition id="inputparam1"> <name id="inputparam1name">zipcode</name> <value>#{pageFlowScope.zipcode}</value> <class>java.lang.String</class> <required/> </input-parameter-definition> <input-parameter-definition id="inputparam2"> <name id="ip2name">tempUnits</name> <value>#{pageFlowScope.tempUnits}</value> <class>java.lang.String</class> </input-parameter-definition> <view id="weather"> <page>/weather.jsff</page> </view> <use-page-fragments/> </task-flow-definition> </adfc-config>
太字で表示したパラメータは、実行時にユーザーが指定した値がセッションBean (pageFlowScope
)に格納され、ここからその値を別のコンポーネントが読み取ることができるような方法で定義されます。
実行時にタスク・フローを編集すると、「パラメータ」タブは、パラメータ値を入力するための2つの入力テキスト・フィールドを表示します。次の項では、これらのタスク・フローのパラメータのLOVを有効にして、ユーザーが事前定義されたオプションのリストから選択できるようにする方法を説明します。
この項では、様々なタイプのLOVをタスク・フローのパラメータ用に構成する方法を説明します。次のサブセクションが含まれます:
静的LOVを使用して、パラメータに対して事前定義された値のリストを表示します。静的LOVは、コンポーザ拡張ファイル(pe_ext.xml
)でネストされた<enumeration>
要素を備えた<lov-config>
セクションを定義することで構成できます。この項では、天気タスク・フローの例を使用して、tempUnits
パラメータの静的LOVを構成する方法を説明します。
静的LOVを構成するには:
コンポーザ拡張ファイルのpe_ext.xml
が存在していない場合は、このファイルをプロジェクトのWebコンテキスト・ルート(たとえば、APPLICATION_HOME
\Portal\adfmsrc\META-INF
ディレクトリ)の下のMETA-INF
ディレクトリに作成します。
「file」メニューから、「新」を選択します。
「新規ギャラリ」ダイアログで、「一般」を展開し、「XML」、「XML文書」の順に選択します。
「OK」をクリックします。
ファイルの名前をpe_ext.xml
にします。
次のコード例に示すように、<lov-config>
セクションを追加し、ネストされた<enumeration>
要素を備えたタスク・フロー定義を含みます。
<lov-config> <!-- Entry for the task flow in which you are configuring the LOV --> <task-flow-definition taskflow-id="/WEB-INF/weather-task-flow-definition.xml#weather-task-flow-definition"> <!-- Specifying the parameter for which you want to define a static LOV --> <input-parameter-definition> <name>tempUnits</name> <!-- List of values to be displayed for the parameter --> <enumeration inline="true"> <item> <name>Celcius</name> <value>c</value> <description>Temperature in Celcius</description> </item> <item> <name>Fahrenheit</name> <value>f</value> <description>Temperature in Fahrenheit</description> </item> </enumeration> </input-parameter-definition> </task-flow-definition> </lov-config>
<lov-config>
セクション内に任意の数の静的LOVを構成できます。
注意:
パラメータ名として翻訳可能な文字列を指定できるようにするために、名前にEL値を使用できます(たとえば、#{resourceBundle.temp_units}
)。
ファイルを保存します。
動的LOVを使用して、実行時にEL値を評価して動的に生成されるリストを表示します。この項では、天気タスク・フローの例を使用して、zipCode
パラメータの動的LOVを構成する方法を説明します。例を簡潔にしておくために、マネージドBeanは、実行時にZipcode
フィールドに表示される静的値のみを提供します。
動的LOVを構成するには:
Bean(たとえば、weatherBean
)を作成し、Zipcode
パラメータの値のリストを定義します。次の例に関連するコード・スニペットを示します。
package portal.weather; . . . public List<SelectItem> getCitiesList() { return citiesList; } private static final String F = "°F"; private static final String C = "°C"; private static final String [][] selectItems = {{"Redwood City", "94065"}, {"Novi, MI", "48375"}, {"Los Angeles", "90001"}, {"New York", "10036"}}; private static final List<SelectItem> citiesList = new ArrayList<SelectItem>(); static { for (String[] city : selectItems){ citiesList.add(new SelectItem(city[1], city[0])); } }
次の例に示すように、アプリケーションのfaces-config.xml
ファイルにweatherBean
を登録します。
<managed-bean> <managed-bean-name>weatherBean</managed-bean-name> <managed-bean-class>portal.weather.WeatherBean</managed-bean-class> <managed-bean-scope>request</managed-bean-scope> </managed-bean>
コンポーザ拡張ファイルのpe_ext.xml
が存在していない場合は、このファイルをプロジェクトのWebコンテキスト・ルート(たとえば、APPLICATION_HOME
\Portal\adfmsrc\META-INF
ディレクトリ)の下のMETA-INF
ディレクトリに作成します。
「file」メニューから、「新」を選択します。
「新規ギャラリ」ダイアログで、「一般」を展開し、「XML」、「XML文書」の順に選択します。
「OK」をクリックします。
ファイルの名前をpe_ext.xml
にします。
次の例に示すように、<lov-config>
セクションを追加し、<enumeration>
要素を備えたタスク・フロー定義を含め、パラメータ値のマネージドBeanを参照します。
<lov-config> <task-flow-definition taskflow-id="/WEB-INF/weather-task-flow-definition.xml#weather-task-flow-definition"> <input-parameter-definition> <name>zipcode</name> <value>90001</value> <enumeration items="#{weatherBean.citiesList}"/> <input-parameter-definition> </task-flow-definition> </lov-config>
<lov-config>
セクション内に任意の数の動的LOVを構成できます。
ファイルを保存します。
通常、ピッカーを使用すると、ユーザーは、使用可能なすべてのオプション(色ピッカー、日付ピッカーなど)を表示するポップアップ・ダイアログから値を選択できます。タスク・フローのパラメータのピッカーを構成することには、次の高水準のタスクが含まれます。
選択したUIを使用してピッカー・タスク・フローを作成します。
ピッカー・タスク・フローのパラメータを定義します。これらのパラメータを使用して、メイン・タスク・フローのパラメータ(ピッカーを構成するためのパラメータ)を移入します。
メイン・タスク・フローのパラメータを構成して、作成したピッカーを表示します。この構成をpe_ext.xml
ファイルに追加する必要があります。
この項では、例として天気タスク・フローを使用して、これらの手順を詳細に説明します。zipCode
パラメータの都市ピッカーを構成する方法を示します。ピッカー・タスク・フローでは、ユーザーは、都市名を指定し、その場所の郵便番号を取得できます。ピッカーからの郵便番号は、天気タスク・フローのZipcodeフィールドに入力されます。この項には次のサブセクションが含まれます:
JSFFフラグメントを使用してピッカー・タスク・フローを作成します。フラグメントを設計して、選択したフィールドまたはオプションを表示します。
ピッカー・タスク・フローを作成するには:
アプリケーション・プロジェクトで、ADFタスク・フロー(たとえば、weather-picker-task-flow-definition
)を作成します。
「ファイル」メニューから「新規」を選択します。
「新規ギャラリ」ダイアログで、「Web層」を展開し、「JSF」、「ADFタスク・フロー」の順に選択します。
「OK」をクリックします。
ビュー
・オブジェクトをタスク・フローに追加します(たとえば、weatherPicker
)。
ビューをダブルクリックしてweatherPicker.jsff
フラグメントを作成します。
関連項目:
タスク・フローの作成の詳細は、『Oracle Fusion Middleware Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』の「ADFタスク・フローの概説」の章を参照してください。
選択したコンポーネントを使用してフラグメントを設計します。次の例は、XMLファイルでユーザーが郵便番号を検索できる2つのInput Text
コンポーネントと、OK
とCancel
の2つのUIコントロールを含むサンプルのタスク・フローを示しています。
<?xml version='1.0' encoding='UTF-8'?> <jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.1" xmlns:af="http://xmlns.oracle.com/adf/faces/rich" xmlns:f="http://java.sun.com/jsf/core"> <af:panelStretchLayout id="psl1"> <f:facet name="center"> <af:panelGroupLayout id="pgl1" layout="vertical"> <af:panelGroupLayout id="pgl2" layout="horizontal"> <!-- Text field and Search button to search for a city by specifying the ZIP code --> <af:inputText label="Enter Zip Code" id="it1" value="#{pageFlowScope.weatherPicker.searchZipcode}"/> <af:commandButton text="Search By Zipcode" id="cb1" actionListener="#{pageFlowScope.weatherPicker.zipcodeSearch}"/> </af:panelGroupLayout> <af:panelGroupLayout id="pgl3" layout="horizontal"> <!-- Text field and Search button to search for a city by specifying the city name --> <af:inputText label="Enter City" id="it2" value="#{pageFlowScope.weatherPicker.searchCity}"/> <af:commandButton text="Search By City" id="cb2" actionListener="#{pageFlowScope.weatherPicker.citySearch}"/> </af:panelGroupLayout> <!-- Output components to display the result from the search --> <af:outputFormatted value="#{pageFlowScope.weatherPicker.city}" id="of2"/> <af:outputFormatted value="#{pageFlowScope.weatherPicker.zipcode}" id="of3"/> </af:panelGroupLayout> </f:facet> <f:facet name="bottom"> <af:panelGroupLayout layout="horizontal" halign="end" id="pkrPgl"> <!-- OK button --> <af:commandButton action="ok" actionListener="#{pageFlowScope.weatherPicker.populateReturnValue}" text="#{Bundle.OK_BUTTON_TEXT}" id="okBtn"/> <af:spacer width="5" id="s1"/> <!-- Cancel button --> <af:commandButton actionListener="#{pageFlowScope.weatherPicker.closePickerPopup}" text="#{Bundle.CANCEL_BUTTON_TEXT}" id="cnclBtn"/> </af:panelGroupLayout> </f:facet> </af:panelStretchLayout> </jsp:root>
「OK
」ボタンと「Cancel
」ボタンのアクション・リスナーは、マネージドBeanのweatherPicker
を参照します。このBeanには、メイン・タスク・フローのパラメータにピッカーで指定した値を移入するロジックも含まれています。
ピッカー・タスク・フロー定義で参照したBeanを作成し、メイン・タスク・フローに値を返すロジックを追加します。
次の例は、名前によって都市を検索し、郵便番号を返すロジックを含むweatherPicker
Beanの関連コード・スニペットを示しています。
package portal.weather.picker; . . . public void populateReturnValue(ActionEvent ae) { Map map = (Map)RequestContext.getCurrentInstance().getPageFlowScope().get("outParam"); if (map != null) map.put("outParamVal", _zipcode); } public void closePickerPopup(ActionEvent ae) { UIComponent component = ae.getComponent(); while (!(component instanceof RichPopup)) component = component.getParent(); if (component != null) ((RichPopup)component).cancel(); } . . .
次の例に示すように、weatherPicker
Beanをタスク・フロー定義ファイルに登録します。
<managed-bean id="pickerbean"> <managed-bean-name id="pickerbeanname">weatherPicker</managed-bean-name> <managed-bean-class id="pickerbeanclass">portal.weather.picker.WeatherPicker</managed-bean-class> <managed-bean-scope id="pickerbeanscope">pageFlow</managed-bean-scope> </managed-bean>
次の例に示すように、ピッカー・タスク・フローの2つの入力パラメータinParamVal
とoutParam
を定義します。
<!-- Parameter used to store the value that must be passed to the main task flow --> <input-parameter-definition id="pickerip1"> <name id="pickerip1name">outParam</name> <value>#{pageFlowScope.outParam}</value> <class>java.util.Map</class> </input-parameter-definition> <!-- Parameter used to store the value specified by the user in the picker --> <input-parameter-definition id="pickerip2"> <name id="pickerip2name">inParamVal</name> <value>#{pageFlowScope.inParamVal}</value> <class>java.lang.String</class> </input-parameter-definition>
これらのパラメータは、pageFlowScope
で参照され、メイン・タスク・フローのパラメータzipCode
を読み取り、移入するために使用されます。「郵便番号」フィールドの隣のピッカー・アイコンをユーザーがクリックすると、inParamVal
を使用して、フィールドの現在の値がセッションBeanに渡されます。ユーザーがピッカー・タスク・フローで都市名を指定して「OK」をクリックすると、Beanはその都市の郵便番号を取得し、outParam
を使用してメインの天気タスク・フローに渡します。
タスク・フローの戻りアクティビティおよび「OK」
ボタンと「取消」
ボタンに対する制御フロー・ルールを定義します。これらのアクティビティおよびルールによって、いずれかのボタンがクリックされると制御はタスク・フローに返されます。次の例に示すようにタスク・フローの戻りアクティビティおよび制御フロー・ルールを定義できます。
<!-- The outcome to be returned to the task flow if a user clicks OK --> <task-flow-return id="ok"> <outcome id="ok1"> <name id="okayed">ok</name> </outcome> </task-flow-return> <!-- The outcome to be returned to the task flow if a user clicks Cancel --> <task-flow-return id="cancel"> <outcome id="cancel1"> <name id="canceled">cancel</name> </outcome> </task-flow-return> <!-- Rules to pass control flow to the ok activity if the user clicks OK and to the cancel activity if the user clicks Cancel --> <control-flow-rule id="flowrule1"> <from-activity-id id="fromactivity1">weatherPicker</from-activity-id> <control-flow-case id="flowcase1"> <from-outcome id="fromoutcome1">ok</from-outcome> <to-activity-id id="toactivity1">ok</to-activity-id> </control-flow-case> <control-flow-case id="flowcase2"> <from-outcome id="fromoutcome2">cancel</from-outcome> <to-activity-id id="toactivity2">cancel</to-activity-id> </control-flow-case> </control-flow-rule>
タスク・フロー定義は、次の例のようなコードを備えます。
<?xml version="1.0" encoding="US-ASCII" ?> <adfc-config xmlns="http://xmlns.oracle.com/adf/controller" version="1.2"> <task-flow-definition id="weather-picker-task-flow-definition"> <default-activity id="pickeractivity1">weatherPicker</default-activity> <input-parameter-definition id="pickerip1"> <name id="pickerip1name">outParam</name> <value>#{pageFlowScope.outParam}</value> <class>java.util.Map</class> </input-parameter-definition> <input-parameter-definition id="pickerip2"> <name id="pickerip2name">inParamVal</name> <value>#{pageFlowScope.inParamVal}</value> <class>java.lang.String</class> </input-parameter-definition> <managed-bean id="pickerbean"> <managed-bean-name id="pickerbeanname">weatherPicker</managed-bean-name> <managed-bean-class id="pickerbeanclass">portal.weather.picker.WeatherPicker</managed-bean-class> <managed-bean-scope id="pickerbeanscope">pageFlow</managed-bean-scope> </managed-bean> <view id="weatherPicker"> <page>/weatherPicker.jsff</page> </view> <task-flow-return id="ok"> <outcome id="ok1"> <name id="okayed">ok</name> </outcome> </task-flow-return> <task-flow-return id="cancel"> <outcome id="cancel1"> <name id="canceled">cancel</name> </outcome> </task-flow-return> <control-flow-rule id="flowrule1"> <from-activity-id id="fromactivity1">weatherPicker</from-activity-id> <control-flow-case id="flowcase1"> <from-outcome id="fromoutcome1">ok</from-outcome> <to-activity-id id="toactivity1">ok</to-activity-id> </control-flow-case> <control-flow-case id="flowcase2"> <from-outcome id="fromoutcome2">cancel</from-outcome> <to-activity-id id="toactivity2">cancel</to-activity-id> </control-flow-case> </control-flow-rule> <use-page-fragments/> </task-flow-definition> </adfc-config>
タスク・フロー定義ファイルを保存します。
タスク・フローのパラメータのカスタム・ピッカーを表示するには、そのパラメータのピッカーをコンポーザ拡張ファイルpe_ext.xml
で構成する必要があります。
タスク・フローのパラメータに対してピッカーを構成するには:
コンポーザ拡張ファイルのpe_ext.xml
が存在していない場合は、このファイルをプロジェクトのWebコンテキスト・ルート(たとえば、APPLICATION_HOME
\Portal\adfmsrc\META-INF
ディレクトリ)の下のMETA-INF
ディレクトリに作成します。
「file」メニューから、「新」を選択します。
「新規ギャラリ」ダイアログで、「一般」を展開し、「XML」、「XML文書」の順に選択します。
「OK」をクリックします。
ファイルの名前をpe_ext.xml
にします。
次のコード例に示すように、<lov-config>
セクションを追加し、ピッカー・タスク・フローを参照する<enumeration>
要素を備えたタスク・フロー定義を含みます。
<?xml version="1.0" encoding="UTF-8"?> <pe-extension xmlns="http://xmlns.oracle.com/adf/pageeditor/extension"> <lov-config> <task-flow-definition taskflow-id="/WEB-INF/weather-task-flow-definition.xml#weather-task-flow-definition"> <!-- Parameter for which you defined the picker --> <input-parameter-definition> <name>zipCode</name> <value>null</value> <!-- enumeration items coming from the picker task flow --> <enumeration picker="/WEB-INF/weather-picker-task-flow-definition.xml#weather-picker-task-flow-definition"/> </input-parameter-definition> </task-flow-definition> </lov-config> </pe-extension>
<lov-config>
セクション内に任意の数のパラメータのピッカーを構成できます。
ファイルを保存します。
実行時にメイン・タスク・フローを編集すると、「コンポーネント・プロパティ」ダイアログにはそのパラメータの隣に拡大アイコンが表示されます。アイコンをクリックすると、ユーザーが値を選択できるピッカー・タスク・フローが起動します。
アプリケーション内の別のタスク・フローのパラメータにLOVを再使用する場合、LOVをグローバル・レベルで定義し、タスク・フローのパラメータからこれを参照できます。
グローバル・リストからLOVを構成するには:
コンポーザ拡張ファイルのpe_ext.xml
が存在していない場合は、このファイルをプロジェクトのWebコンテキスト・ルート(たとえば、APPLICATION_HOME
\Portal\adfmsrc\META-INF
ディレクトリ)の下のMETA-INF
ディレクトリに作成します。
「file」メニューから、「新」を選択します。
「新規ギャラリ」ダイアログで、「一般」を展開し、「XML」、「XML文書」の順に選択します。
「OK」をクリックします。
ファイルの名前をpe_ext.xml
にします。
次のコード例に示すように、<lov-config>
セクションを追加し、(タスク・フロー定義の外側で)<enumeration>
要素内の値をリストします。
<lov-config>
<!-- Global enumerations ->
<enumeration id="temperature">
<item>
<name>Celcius</name>
<value>c</value>
<description>Temperature in Celcius</description>
</item>
<item>
<name>Fahrenheit</name>
<value>f</value>
<description>Temperature in Fahrenheit</description>
</item>
</enumeration>
<task-flow-definition . . . >
. . .
<lov-config>
<lov-config>
セクション内に任意の数のグローバルLOVを構成できます。
次の例に示すように、pe_ext.xml
ファイルの任意の入力パラメータ定義からこのグローバルLOVを参照します。
<task-flow-definition taskflow-id="/WEB-INF/weather-task-flow-definition.xml#weather-task-flow-definition">
<input-parameter-definition>
<name>tempUnits</name>
<value>Celsius</value>
<enumeration ref="temperature"/>
</input-parameter-definition>
</task-flow-definition>
ファイルを保存します。
イベント・ハンドラは、コンポーザに登録され、ユーザーがページでアクションを実行するとコールされるJavaクラスです。たとえば、「保存」ボタンをクリックすると、コンポーザはアプリケーションに保存イベントに応答する機会を与えるためにアプリケーション・コードにコール・バックします。コンポーザがデフォルトで提供するイベント・ハンドラに加えて、カスタム・プロパティ・パネルの変更を保存するなど、アプリケーション固有のイベントに対して追加のハンドラを構成できます。
この項では、コンポーザのUIイベント用にイベント・ハンドラを作成して登録する方法について説明します。次のサブセクションが含まれます:
コンポーザにイベント・ハンドラを登録すると、そのハンドラは対応するイベントがコンポーザUIで起動されるときにコールされます。
この項では、イベント・ハンドラを作成して、そのハンドラをコンポーザに登録する方法を説明します。次のサブセクションが含まれます:
表26-1に、現在コンポーザがハンドラの登録をサポートしているUIイベントをリストします。
表26-1 ハンドラの登録がサポートされているイベント
イベント | 原因 | イベント・タイプ | リスナー・インタフェース(oracle.adf.view.page.editor.event) | メソッド | イベント・インタフェース |
---|---|---|---|---|---|
保存 |
ユーザーがコンポーザ・ツールバーの「保存」ボタンまたは「保存してラベル付け」ボタンをクリックするか、「コンポーネント・プロパティ」ダイアログまたは「ページ・プロパティ」ダイアログの「適用」(保存)ボタンまたは「OK」(保存して閉じる)ボタンをクリックすると起動します。 |
|
|
|
|
閉じる |
ユーザーがコンポーザ・ツールバーで「閉じる」ボタンをクリックすると起動します。 |
|
|
|
|
削除 |
ユーザーがコンポーネントを削除すると起動します。 |
|
|
|
|
追加 |
ユーザーがアイテムの「追加」ボタンをクリックして、リソース・カタログからページにコンポーネントを追加すると起動します。 |
|
|
|
|
選択 |
ユーザーが次の項目を選択すると起動します。
|
|
|
|
|
属性の変更 |
ユーザーが属性を変更すると起動します。 属性変更が無効な場合、リスナーは |
|
|
|
|
コンポーザにイベントを登録するには、まず、Javaクラスを作成して、イベント・ハンドラに適切なリスナーを実装する必要があります。この項では、保存イベント・ハンドラを作成する手順を説明します。同様の手順を実行すると、表26-1にリストされている、すべてのサポート対象のイベントのイベント・ハンドラを作成できます。
保存イベント・ハンドラは、ユーザーがコンポーザのツールバーで「保存」ボタンをクリックするか、「コンポーネント・プロパティ」ダイアログまたは「ページ・プロパティ」ダイアログで「適用」ボタンまたは「OK」ボタンをクリックするとコールされます。保存イベント・ハンドラはoracle.adf.view.page.editor.event.SaveListener
を実装する必要があります。保存イベントのisCommit
メソッドを使用して、ページに対して行われた変更とコンポーネント・プロパティに対して行われた変更を区別できます。値がtrue
の場合、ユーザーがコンポーザのツールバーで「保存」ボタンをクリックし、ページに加えた変更を保存したことを示します。値がfalse
の場合、ユーザーが「コンポーネント・プロパティ」ダイアログで「適用」ボタンまたは「OK」ボタンをクリックし、コンポーネント・プロパティに対して行われた変更を保存したことを示します。
保存イベント・ハンドラを作成するには:
これと同様の手順を実行することによって、サポートされているすべてのイベントのイベント・ハンドラを作成できます。
イベント・ハンドラを作成して実装したら、そのハンドラをコンポーザに登録する必要があります。登録は、対応するイベントがUIで発生したときに、コンポーザによってハンドラがコール・バックされるようにするために必要です。
コンポーザ拡張ファイル(/META-INF/pe_ext.xml
)でイベント・ハンドラを登録します。このファイルの作成の詳細は、「コンポーザへのアドオンの登録」を参照してください。
イベント・ハンドラを登録するには:
実行時、登録したイベント・ハンドラは、拡張ファイルの順序およびこれらがクラス・パスで見つかる順序に応じてコールされます。コンポーザのネイティブ・イベント・ハンドラは最後にコールされます。
イベント・ハンドラのprocess
EventName
メソッドの起動時に、イベント・ハンドラがAbortProcessingException
をスローすると、イベントは取り消されて、コンポーザのネイティブ・イベント・ハンドラを含むイベント・ハンドラは、それ以上コールされなくなります。ただし、イベント・ハンドラのインスタンス化時にエラーが発生する場合は、コンポーザが次のイベント・ハンドラを続行します。警告メッセージがログに記録されます。
コンポーザのページでトリガーされた各UIイベントでは、対応するイベント・ハンドラはアプリケーションに登録されたリスナーからメソッドをコール・バックします。いくつかの追加の構成を実行することで、イベント・ハンドラが実行される順序を指定して、リスナーがプロセスを終了するように構成するか、イベントが処理されるようにコンポーザに通知できます。
イベント・ハンドラの順序を指定することによって、イベント・ハンドラ(したがってリスナー)がコールされる順序を決定できます。pe_ext.xml
ファイルで登録されたイベント・ハンドラに対してsequence
属性を定義することによって、リスナーへの順序番号の割当てまたはデフォルト値の変更を行えます。
リスナーに順序番号を指定するには:
イベント・ハンドラを構成して、例外をスローすることによって現在のイベントおよびその後のすべてのイベントの処理を終了できます。このためには、リスナーをthrows AbortProcessingException
として実装するときに使用したメソッドを宣言する必要があります。また、ハンドラを構成して、イベントがEvent.setEventHandled(true)
メソッドを使用して処理されたことをコンポーザに通知できます。
たとえば、delete
イベント・ハンドラを構成して、ユーザーがコンポーザでコンポーネントを削除しようとしたときに、現在のイベントおよび保留中のすべての削除イベントを終了して例外をスローできます。これを有効にするには、次の例に示すように、DeletionListener
インタフェースを実装する必要があります。
public class DeleteHandler implements DeletionListener
{
...
public void processDeletion(DeletionEvent delEvent) throws AbortProcessingException
{
// Get the component that must be deleted
UIComponent comp = delEvent.getComponent();
if (comp != null)
{
try
{
// Assuming that a custom method, handleDelete(comp), handles deletion of
// a component and returns true on successful deletion and false in case
// of failure
boolean deleteSucceeded = handleDelete(comp);
// If deletion failed, then notify Composer that the delete event
// has been handled. No further events are processed.
if (!deleteSucceeded)
delEvent.setEventHandled(true);
}
catch (Exception e)
{
// Catch Exception throw by handleDelete(comp) and handle it by throwing
// AbortProcessingException to stop processing of delete events.
throw new AbortProcessingException(e)
}
}
}
...
}
ドロップ・ハンドラは、コンポーザに登録され、ユーザーがリソース・カタログで「追加」リンクをクリックするとコールされるJavaクラスです。ドロップ・ハンドラは、処理できるデータ・フレーバを宣言します。カタログの各リソースにフレーバがあります。ユーザーがリソースの隣の「追加」リンクをクリックすると、コンポーザは登録されているすべてのドロップ・ハンドラを問い合せて、このフレーバを処理できるかどうか確認します。そのフレーバを処理できるドロップ・ハンドラが1つのみの場合、制御がそのドロップ・ハンドラに渡され、リソースがすぐにページに追加されます。そのフレーバを処理できるドロップ・ハンドラが複数ある場合、コンテキスト・メニューに使用可能なドロップ・ハンドラが表示されます。リソースは、ユーザーがコンテキスト・メニューからJavaドロップ・ハンドラを選択したときにページにドロップされます。
複数のJavaドロップ・ハンドラを持つリソースの例は、カタログでドキュメント・サービスを構成した場合のDocumentsフォルダ内で使用可能なPersonal Documentsサブフォルダです。このサブフォルダは、Content Presenter、Document List ViewerまたはDocument Libraryとして追加できます。
注意:
リリース11.1.1.1でAdd
操作を処理するために使用されていたAdditionListener
メカニズムはまだ使用可能ですが、現在、コンポーザはまずドロップ・ハンドラをコールし、カタログでAdd
操作を処理します。既存のAdditionListener
をドロップ・ハンドラに変換することをお薦めします。
この項では、ドロップ・ハンドラを作成し、これをアプリケーションに登録する手順を説明します。次のサブセクションが含まれます:
この項では、リソース・カタログからXMLコンテンツを追加するサンプルのドロップ・ハンドラを作成して、このドロップ・ハンドラをコンポーザに登録する方法を説明します。次のサブセクションが含まれます:
コンポーザを使用してドロップ・ハンドラを作成するには、まず抽象ベース・クラス(DropHandler
)を拡張して、getName()
、getAcceptableFlavors()
およびhandleDrop()
の各メソッドを実装する必要があります。この項では、Test
というXMLコンポーネントをリソース・カタログに追加して、XMLコンテンツを追加するためのCustom XML
というドロップ・ハンドラを作成する例を説明します。
ドロップ・ハンドラを作成するには:
ドロップ・ハンドラを実装したら、このハンドラをコンポーザに登録する必要があります。登録は、ユーザーがカタログで「追加」リンクをクリックしたときに、ハンドラがコンポーザによってコールされるようにするために必要です。コンポーザ拡張ファイル(/META-INF/pe_ext.xml
)でドロップ・ハンドラを登録します。このファイルの作成の詳細は、「コンポーザへのアドオンの登録」を参照してください。
ドロップ・ハンドラを登録するには:
必要数の<drop-handler>
要素を追加することによって、拡張ファイルに任意の数のドロップ・ハンドラを登録できます。
ユーザーがカタログのコンポーネントの「追加」リンクをクリックすると、そのフレーバをサポートしているすべてのドロップ・ハンドラが「追加」リンクのコンテキスト・メニューのオプションとして表示されます。ただし、そのフレーバを処理できるドロップ・ハンドラが1つのみの場合、リソースはすぐにページに追加されます。
図26-13に、Custom XML
オプションおよびデフォルトのXMLオプションを備えたTest
XMLコンポーネントの「追加」リンクをクリックしたときに表示されるコンテキスト・メニューを示します。
一部のコンポーネント・プロパティは、デフォルトでフィルタ処理によって除外されるため、コンポーザの「コンポーネント・プロパティ」ダイアログに表示されません。デフォルトのフィルタは、コンポーザの拡張ファイル(/META-INF/pe_ext.xml)の<filter-config>
セクションで定義されています。
グローバル・フィルタは、すべてのコンポーネントの属性をフィルタ処理します。これらは<global-attribute-filter>
タグを使用して定義されます。タグ・レベルのフィルタは、指定したコンポーネントの属性のみをフィルタ処理します。これらは<taglib-filter>
タグを使用して定義されます。
注意:
拡張ファイルでは、任意の数の<taglib-filter>
タグを<filter-config>
の下に持つことができますが、すべてのグローバル属性フィルタを定義する<global-attribute-filter>
タグは1つのみ持つことができます。
「コンポーネント・プロパティ」ダイアログでさらに多くのプロパティを非表示にするために追加のフィルタを定義できます。この項では方法について説明します。次のサブセクションが含まれます:
コンポーザは、組込みフィルタ構成を定義します。拡張ファイル(pe_ext.xml
)を使用して、追加のプロパティ・フィルタの定義およびフィルタの削除を実行できます。(1つのタグに対してでも)異なる拡張ファイルで任意の数のフィルタを定義できます。コンポーザは、すべての拡張ファイルからのフィルタ処理情報をマージします。
注意:
pe_ext.xml
ファイルの作成の詳細は、「コンポーザへのアドオンの登録」を参照してください。
例外ファイルでプロパティ・フィルタを定義するには、filter-config
要素を使用します。次の要素は、含まれているattribute
タグに対して定義されます。
label
要素により、UIの要素に対するデフォルト・ラベルをオーバーライドできます。ELを使用してローカライズされた文字列を取得するか、またはデザイン・ビューまたはソース・ビューで異なるラベルを表示できます。
view
要素を特定のビュー(design
またはsource
)の特定のタグの属性をフィルタするために使用できます。
filtered
要素は、グローバルにフィルタされる場合にも属性を表示するために使用できます。グローバルにフィルタされた要素をリストアするには、filtered="false"
を使用します。
pe_ext.xml
ファイルで、次の例に示すようにfilter-config
要素を追加します。
<filter-config> <global-attribute-filter> <attribute name="readOnly" filtered="false" label="Read Only"/> <attribute name="required" filtered="false" label="Mandatory"/> <attribute name="shortDesc" filtered="false" label="#{Bundle.PNL_TB_SHORTDESC}"/> </global-attribute-filter> <taglib-filter namespace="http://xmlns.oracle.com/adf/faces/rich"> <tag name="goLink"> <attribute name="accessKey" view="design"/> <attribute name="targetFrame" filtered="false" view="source"/> <attribute name="destination" filtered="false" label="#{pageEditorPanelBean.layoutView ? 'Where do you want to surf?' : 'Destination'}"/> </tag> <tag name="inputText"> <attribute name="all" view="design"/> <attribute name="label" label="Field Name" filtered="false" /> <attribute name="readOnly" filtered="false" /> <attribute name="required" filtered="false" /> <attribute name="rendered" filtered="false" /> <attribute name="wrap" filtered="false" /> </tag> </taglib-filter> </filter-config>
ファイルを保存します。
タスク・フローで受け渡すパラメータを有効にする場合、管理者は、特定のパラメータを設定することによってカスタマイズ・マネージャをカスタマイズできます。デフォルトでは、管理者は、コンポーザのカスタマイズ・マネージャ・タスク・フローにパラメータを渡すことはできません。表26-2では、カスタマイズ・マネージャ・タスク・フローでサポートされているパラメータについて説明しています。
表26-2 カスタマイズ・マネージャ・タスク・フローのパラメータ
パラメータ名 | 値 | 説明 |
---|---|---|
defaultPage |
ページのURI |
管理するデフォルト・ページを指定するために使用します。この値がnullの場合、現在のページが使用されます。 |
dynamicNodeMap |
|
ページ、XMLドキュメントまたは指定されたページあるいはフラグメントのタスク・フローのリストを次の形式を使用して返すために使用されます。 Page1.jspx -> List of {CustomizationManagerTaskFlowNode or CustomizationManagerPageNode or CustomizationManagerXMLNode} そのページの動的タスク・フローを渡すためには そのページのページ・テンプレートを渡すためには このページが所有するXMLドキュメントを渡すためには |
showBase |
trueまたはfalse デフォルト: false |
ベース・ドキュメントの列を表示または非表示にするために使用します。 |
showCurrentLayers |
trueまたはfalse デフォルト: true |
現在使用しているレイヤーの詳細を表示する列を表示または非表示にするために使用します。 |
showAllLayers |
trueまたはfalse デフォルト: true |
現在のレイヤー以外のレイヤーの詳細を表示する列を表示または非表示にするために使用します。 |
showLayersforCurrent |
|
「現在のコンテキスト」列で使用可能である必要があるレイヤーのリストを指定するために使用します。 このパラメータは、レイヤー名およびレイヤー値のリストならびに「現在のコンテキスト」列に表示する必要があるパターンを取ります。詳細は、「カスタマイズ・マネージャ・タスク・フローのパラメータを設定する方法」を参照してください。 |
showLayersforAll |
|
「すべてのレイヤー」列で使用可能である必要があるレイヤーのリストを指定するために使用します。 このパラメータは、レイヤー名およびレイヤー値のリストならびに「すべてのレイヤー」列に表示する必要があるパターンを取ります。詳細は、「カスタマイズ・マネージャ・タスク・フローのパラメータを設定する方法」を参照してください。 |
labelPrefixes |
|
「プロモート」ダイアログに表示する必要がある、空白で区切られたラベルの接頭辞のリストを指定するために使用します。指定された接頭辞を使用して作成されたラベルのみが「プロモート」ダイアログに表示されます。 デフォルトでは、すべてのラベルが表示されます。 |
maxDepth |
String |
カスタマイズ・マネージャでのタスク・フローの階層の深さを制限するために使用します。 デフォルト値は 最大ネストの10タスク・フローを表示できます。カスタマイズ・マネージャは、10より大きい値を指定しても、深さ10しか表示しません。 |
showDownload |
trueまたはfalse デフォルト: true |
「ダウンロード」リンクを表示または非表示にするために使用します。 |
showUpload |
trueまたはfalse デフォルト: true |
「アップロード」リンクを表示または非表示にするために使用します。 |
showDelete |
trueまたはfalse デフォルト: true |
「削除」リンクを表示または非表示にするために使用します。 |
showPromote |
trueまたはfalse デフォルト: true |
「プロモート」リンクを表示または非表示にするために使用します。 |
注意:
Map
およびList
の実装は、クラスタベースの環境で正しく動作するようにカスタマイズ・マネージャに対して連続化可能
である必要があります。通常、ArrayList
およびHashMap
は連続化可能
です。
この項では、カスタマイズ・マネージャ・タスク・フローでパラメータの編集を可能にする手順を説明します。次のサブセクションが含まれます:
カスタマイズ・マネージャ・タスク・フローにパラメータを渡すには、アプリケーションのadf-config.xml
ファイルのカスタマイズ・マネージャのアドオン・パネル構成の一部としてparameters
属性を定義する必要があります。
タスク・フローでパラメータ編集を有効にするには:
デフォルトのコンポーザのツールバーは、要素を追加、削除または再配置して、既存の要素をオーバーライドすることでカスタマイズできます。ツールバーの拡張性を有効にするために、コンポーザのツールバーの要素がセクションにグループ化されています。これらのセクションを使用してツールバーをカスタマイズできます。それぞれのセクションには固有の名前が付いており、1つ以上の要素が中に含まれています。
注意:
「保存」ボタンがツールバーに表示されるのは、アプリケーションがサンドボックスを使用するように構成されている場合のみです。詳細は、「コンポーザのサンドボックスの使用」を参照してください。
「ヘルプ」アイコンは、アプリケーションでヘルプ・プロバイダを構成した場合、またはコンポーザのパネルまたはダイアログからヘルプをフックアップした場合にのみツールバーに表示されます。
コンポーザのツールバーは、ADF Faces Toolbox
タグを使用して作成されます。ツールバーの各行はToolbar
タグです。したがって、セパレータ・バーなどのUIコンポーネントはToolbar
コンポーネントから継承されます。
表26-3ではツールバーの領域を説明します。
表26-3 ツールバーの領域
セクションまたは領域 | 説明 |
---|---|
|
ページ名付きのメッセージを含む領域。 |
|
ステータス・インジケータを含む領域。 |
|
ユーザーが「デザイン」ビューと「構造」ビューを切り替えることができる「表示」メニューを含む領域。 |
|
コンポーザのアドオンが含まれている領域。アドオンは、この領域内ですべて順次表示されます。詳細は、「コンポーザのアドオンの作成」を参照してください。 |
|
「ヘルプ」アイコンを含む領域。 |
|
「保存」ボタンおよび「閉じる」ボタンを含む領域。 |
|
2つのセクション間の広い空間。 |
|
セクション間の改行。改行の後のすべてのセクションは、ツールバーで新しい行になります。 |
ツールバー・セクションを使用して、次の方法でコンポーザのツールバーをカスタマイズできます。
組込み要素の再配置および非表示
カスタム要素を使用した新しいセクションの追加
デフォルトのセクションを変更してカスタム要素を表示
この項では、コンポーザのツールバーをカスタマイズする手順を説明します。内容は次のとおりです。
Page Customizable
コンポーネントのtoolbarLayout
属性を使用して、表示するツールバーのセクションおよびその表示順を制御します。
アプリケーションのすべての編集可能ページのツールバーをカスタマイズするために、テンプレートを作成し、Page Customizable
コンポーネントをテンプレートに追加し、toolbarLayout
属性をPage Customizable
コンポーネントに対して指定できます。その後、このテンプレートに基づいてアプリケーションのすべてのページをカスタマイズできます。
toolbarLayout
の値を指定しないと、この属性は、コンポーザのツールバーのセクションのデフォルト・レイアウトであるmessage addonpanels stretch button help
に内部的に設定されます。
アプリケーション・ページのツールバーをカスタマイズするには:
toolbarLayout
属性でファセットを作成し、ファセット名を指定することによって、カスタム・セクションを追加できます。新しいファセットにツールバーに表示する要素を移入します。次の例は、セクションの作成方法、具体的には、ユーザーが不具合をレポートできるポップアップを開く「バグをレポート」アイコンを追加する方法を説明します。
カスタム・セクションを追加するには:
デフォルトのツールバーのセクションと同じ名前のファセットを追加し、これにカスタム・コンテンツを移入することによって、デフォルトのツールバーのセクションにカスタム・コンテンツを表示できます。ファセットのコンテンツは、デフォルトのセクションのコンテンツをオーバーライドします。たとえば、ユーザーへのカスタム・メッセージをEditing Page:
Page_Name
メッセージの場所に表示するために、message
というカスタム・ファセットを作成し、ユーザーに表示するテキストを含むOutput Text
コンポーネントを含めることができます。Output Text
コンポーネントは、デフォルトのメッセージの場所に表示されます。次の例は、カスタム・ツールバー・メッセージを含むPage Customizable
コンポーネントを示しています。
<pe:pageCustomizable id="pageCustomizable1"
toolbarLayout="message newline button stretch statusindicator menu"
<cust:panelCustomizable id="panelCustomizable1" layout="scroll"/>
<f:facet name="message">
<af:outputText value="Welcome!"/>
</f:facet>
<f:facet name="editor">
<pe:pageEditorPanel id="pep1"/>
</f:facet>
</pe:pageCustomizable>
直接選択により、ユーザーはコンポーザの「構造」ビューから「デザイン」ビューまたは「コンテンツの追加」ビューまで特定のカスタマイズ機能を拡張し、実行時にページ内から要素を変更できます。これにより、基礎となるアプリケーションにダメージを及ぼさないような安全な環境を作りながら、ビジネス・ユーザーの手でより多く制御することができます。
すべての直接選択機能は、「構造」ビューで使用できますが、ビジネス・ユーザーには「構造」ビューを安全かつ効率的に使用する知識や経験がありません。これらのユーザーは簡単にページを壊して、アプリケーション・ロジックを回避することができます。
直接選択を使用して、少数の選択したコンポーネントを選択可能および編集可能にすることができます。たとえば、フォーム内のフィールドの順序の変更、フォーム・フィールドのラベルの変更、表内の列名の変更またはフォームの特定のフィールドの非表示など。
直接選択機能の詳細は、「実行時の処理」を参照してください。
直接選択が有効になっている場合、実行時のページの外部に対する表示は、エンド・ユーザーに対する表示と同じです(図26-15)。
コンポーネントのプロパティを編集するには、ユーザーは有効な要素を選択し、「コンポーネントの編集」または「親コンポーネントの編集」(適用可能な場合)をクリックできます(図26-16)。
「コンポーネント・プロパティ」ダイアログにより、ユーザーはコンポーネントに対して定義されたプロパティを編集し、コンポーネントに対して構成された他の操作にアクセスできます。ユーザーが「親コンポーネントの編集」を選択した場合、「子の管理」タブがダイアログに含まれています。ELが上書きが許可されないか、上書きから保護されない場合、図26-17で示すように、「式ビルダー」および「オーバーライド」オプションが使用できません。このイメージには編集から保護されるフィールドの例も含まれています(「コンポーネントの表示」)。
複数の操作がダイアログのタブに表示されます。タブの順序はパネル登録で定義されています。操作が囲んでいるコンポーネントに対して登録されていない場合、その操作のタブは表示されません。パネル登録の詳細は、「カスタム・プロパティ・パネルの作成」を参照してください。
この項では、コンポーザの拡張性機能の使用中に発生する可能性のある問題をトラブルシューティングする際に役立つ情報を提供します。
ロギングの構成の詳細は、「コンポーザを使用したページの実行時編集の有効化」を参照してください。
問題
アドオンを作成したが、コンポーザのツールバーに表示されません。
解決策
次の点を確認してください。
pe_ext.xml
ファイルがアプリケーションまたはJARファイルの/META-INF
フォルダにあり、クラス・パスで利用可能です。
パネルをpe_ext.xml
で登録する際に指定したタスク・フロー・バインディングIDが的確です。
<pe:addon-panel>
エントリがadf-config.xml
ファイルの<pe:page-editor-config>
セクションの下に存在します。
アドオンがJARファイルにある場合、JARファイルがADFライブラリとして作成されていることを確認してください。
アドオンの詳細は、「コンポーザのアドオンの作成」を参照してください。
問題
カスタム・プロパティ・パネルを登録しました。ただし、プロパティを表示するコンポーネントを選択する際に、このパネルが「コンポーネント・プロパティ」ダイアログに表示されません。
解決策
次の点を確認してください。
pe_ext.xml
ファイルがアプリケーションまたはJARファイルの/META-INF
フォルダにあり、クラス・パスで利用可能です。
パネルをpe_ext.xml
で登録する際に指定したタスク・フロー・バインディングIDが的確です。
property-panel
の登録が正しく、パネルを表示するコンポーネントに対して指定されています。さらに、コンポーネントの完全修飾クラス名がcomponent
ノードを使用して正しく指定されています。
プロパティ・パネルの登録の重複によってパネル・エントリがオーバーライドされていません。
レンダリングされた属性を使用するようにパネルが構成されている場合、値またはELがtrue
に評価されています。
アドオンがJARファイルにある場合、JARファイルがADFライブラリとして作成されていることを確認してください。
カスタム・プロパティ・パネルの詳細は、「カスタム・プロパティ・パネルの作成」を参照してください。
問題
「コンポーネント・プロパティ」ダイアログでコンポーネントの一部のプロパティが表示されません。
解決策
コンポーネント・プロパティがフィルタ処理されていないことおよび制限されていないことを確認します。詳細は、「プロパティ・フィルタの定義方法」および「属性レベルのセキュリティの適用」を参照してください。