Oracle® Fusion Middleware Oracle Application Development FrameworkによるFusion Webアプリケーションの開発 12c (12.1.2) E48099-02 |
|
![]() 前 |
![]() 次 |
この章では、Fusion Webアプリケーションでのダイアログの作成方法について説明します。この章では、ADF Controllerおよびタスク・フローを使用したダイアログの作成方法、およびその代替方法であるADF Facesダイアログ・フレームワークの使用方法を説明します。
この章には次の項が含まれます:
エンド・ユーザーの現在のページを表示するブラウザ・ウィンドウ外のセカンダリ・ブラウザ・ウィンドウにエンド・ユーザーへの情報を表示する場合は、ダイアログを使用します。たとえば、プライマリ・ブラウザ・ウィンドウ内のタスクに関するヘルプ情報をエンド・ユーザーに対して表示する場合や、エンド・ユーザーが値のリストから値を選択できるようにする場合です。このヘルプ情報の例は、モードレス・ダイアログが適しているユースケースです。モードレス・ダイアログを使用すると、エンド・ユーザーはプライマリ・ウィンドウとダイアログの両方で同時に作業できます。エンド・ユーザーによる値の選択が必要なユースケースの場合、モーダル・ダイアログがより適切です。モーダル・ダイアログを使用した場合、ダイアログで要求されたアクション(例: 値の選択)を実行しないかぎり、エンド・ユーザーはそのダイアログを起動したページにアクセスできません。
エンド・ユーザーに対してモードレス・ダイアログを構成する場合は、ADF Facesダイアログ・フレームワークを使用します。エンド・ユーザーに対してモーダル・ダイアログを構成する予定の場合は、1つ以上のダイアログを起動するために、ADF Controllerのバインド・タスク・フローを構成します。
25.2項「モーダル・ダイアログでのバインド・タスク・フローの実行」では、モーダル・ダイアログでバインド・タスク・フローを実行し、エンド・ユーザーから入力を取得できる方法と、取得した入力を使用してバインド・タスクを呼び出したビュー・アクティビティに戻ることができる方法を説明しています。アプリケーションでADFコントローラ・タスク・フローが使用されないか、モードレス・ダイアログの使用が必要な場合、25.3項「バインド・タスク・フローのかわりとしてのADF Facesダイアログ・フレームワークの使用」で、ADF Facesダイアログ・フレームワークを使用してダイアログに1つまたは複数のページをレンダリングできる方法が説明されています。
アプリケーションでダイアログを構成または使用する前に、他のOracle ADF機能を理解しておくことが有効な場合があります。また、構成するダイアログで実行可能な機能について読むことが必要な場合もあります。次に、関連する他の機能へのリンクを示します。
アプリケーションでADFコントローラのタスク・フローを使用する場合は、タスク・フローが提供する機能についてさらに理解しておくと役に立つ場合があります。詳細は、第20章「ADFタスク・フローの概説」を参照してください。
ADF Facesコンポーネントの詳細は、『Oracle ADF FacesによるWebユーザー・インタフェースの開発』を参照してください。
また、Oracle ADFが提供するAPIを使用してダイアログのカスタム・コードを記述できます。カスタム・コードを記述する際は、次の例のように、内部としてマークされているパッケージをインポートしないようにしてください。
import oracle.adfinternal.controller.*;
カスタム・コードの記述に使用できるAPIの詳細は、次のドキュメントを参照してください。
Oracle ADF Controller Java APIリファレンス
Oracle ADF Faces Java APIリファレンス
モーダル・ダイアログ内で実行するバインド・タスク・フローを構成し、エンド・ユーザーの入力を取得し、取得した入力とともに、バインド・タスク・フローをコールしたビュー・アクティビティに戻ることができます。構成するバインド・タスク・フローでは、ページ・フラグメントではなく、ページが参照される必要があります。
図25-1に、ADFタスク・フローのSummitサンプル・アプリケーションから必要とされる構成の例を示します。create-edit-orders-task-flow-definition
のタスク・フローには、ビュー・アクティビティ(Orders)が含まれ、エンド・ユーザーは、モーダル・ダイアログをレンダリングするorders-select-many-items.xml
タスク・フローをそのビュー・アクティビティから起動します。詳細は、25.2.1項「モーダル・ダイアログ内でのバインド・タスク・フローの実行方法」を参照してください。
エンド・ユーザーがダイアログを閉じると、制御およびすべての修正値は、create-edit-orders-task-flow-definition
のコール元タスク・フローにある起動ページに戻ります。詳細は、25.2.2項「モーダル・ダイアログから値を戻す方法」を参照してください。
さらに、モーダル・ダイアログが制御を戻した場合は、アプリケーションを構成して、起動ページの一部をリフレッシュできます。詳細は、25.2.3項「モーダル・ダイアログが戻った後にページをリフレッシュする方法」を参照してください。
既存のタスク・フローにビュー・アクティビティとタスク・フロー・コール・アクティビティを追加します。ビュー・アクティビティにより、エンド・ユーザーがアクションを起動できるページが起動され、その結果、モーダル・ダイアログに表示されるバインド・タスク・フローが起動します。
始める前に:
構成する属性がモーダル・ダイアログ内のバインド・タスク・フローの機能に与える影響について理解しておくと役に立つ場合があります。詳細は、25.2項「モーダル・ダイアログ内でのバインド・タスク・フローの実行」を参照してください。
他のOracle ADF機能を使用して追加できる機能を理解しておくことも役立ちます。詳細は、25.1.2項「アプリケーションでダイアログを使用するための追加の機能」を参照してください。
バインド・タスク・フローをモーダル・ダイアログ・ボックス内で実行するには:
「アプリケーション」ウィンドウで、既存のタスク・フローをダブルクリックします。
タスク・フローのダイアグラムで、ビュー・アクティビティをダブルクリックし、関連付けられているページを開きます。
バインド・タスク・フローをモーダル・ダイアログ・ボックスとして起動するために、実行時にエンド・ユーザーがクリックするコマンド・コンポーネント(button
コンポーネントなど)を選択します。
「プロパティ」ウィンドウで「共通」セクションを開き、「アクション」フィールドでバインド・タスク・フローを起動する制御フロー・ケースを入力します。
たとえば、図25-1のselectmultipleitems
などです。
「UseWindow」ドロップダウン・リストから、ポップアップ・ダイアログ内でバインド・タスク・フローを起動するために、「true」を選択します。
既存のタスク・フローのダイアグラムで、タスク・フロー・コール・アクティビティを選択します。
「プロパティ」ウィンドウで「動作」セクションを開き、ダイアログとしてバインド・タスク・フローを実行するために、「「別名実行」ダイアログ」ドロップダウン・リストから「true」を選択します。
タスク・フロー・アクティビティをコールするバインド・タスク・フローはダイアログとして動作できます。このバインド・タスク・フローは、手順3から5で構成したコマンド・コンポーネントによって起動できるほか、25.2.2項「モーダル・ダイアログから値を戻す方法」の説明に従って、コマンド・コンポーネントをレンダリングするビュー・アクティビティに値を戻すことができます。これらの他の変更でモーダル・ダイアログのバインド・タスク・フローを実行させる必要があることに注意してください。run-as-dialog
属性のtrue
への設定では不十分です。
外部ブラウザ・ウィンドウにダイアログをレンダリングする場合は「表示タイプ」ドロップダウン・リストから「external-window」(デフォルト値)、同じブラウザ・ウィンドウにダイアログをレンダリングする場合は「inline-popup」を選択します。
モーダル・ダイアログにレンダリングされるバインド・タスク・フローを構成して、エンド・ユーザーがモーダル・ダイアログを閉じたときに、バインド・タスク・フローを起動したビュー・アクティビティに値を戻すことができます。戻された値は、たとえば、ビュー・アクティビティに関連付けられているページ上の入力コンポーネントに表示できます。
入力パラメータを宣言し、値を戻すには、タスク・フロー・コール・アクティビティによってコールされるバインド・タスク・フローを構成する必要があります。詳細は、22.3項「バインド・タスク・フローへのパラメータ渡し」を参照してください。
コマンド・コンポーネント(例: button
コンポーネント)のreturnListener
属性の値として、1つの引数を持つメソッド(戻りイベント)に対するメソッド・バインディングを指定します。returnListener
属性により、ビュー・アクティビティに関連付けられているページ上の入力コンポーネントで、この値が設定されます。入力コンポーネントのバッキングBeanを指定し、入力コンポーネントのpartialTrigger
属性をコマンド・コンポーネントのIDに設定します。
さらに、次を指定する必要があります。
コール先バインド・タスク・フローに戻り値の定義を指定し、 コール先バインド・タスク・フローの終了時に戻り値を取得する場所を示します。
既存のタスク・フローのタスク・フロー・アクティビティに戻り値を指定し、 既存のタスク・フローが戻り値を検出できる場所を示します。
詳細は、22.4項「バインド・タスク・フローの戻り値の構成」を参照してください。
バッキングBean、入力コンポーネントおよびコマンド・コンポーネントの詳細は、『Oracle ADF FacesによるWebユーザー・インタフェースの開発』の「入力コンポーネントの使用およびフォームの定義」の章を参照してください。
始める前に:
構成する属性がモーダル・ダイアログ内のバインド・タスク・フローの機能に与える影響を理解しておくと役に立つ場合があります。詳細は、25.2項「モーダル・ダイアログ内でのバインド・タスク・フローの実行」を参照してください。
他のOracle ADF機能を使用して追加できる機能を理解しておくことも役立ちます。詳細は、25.1.2項「アプリケーションでダイアログを使用するための追加の機能」を参照してください。
次のタスクを完了する必要があります。
戻り値を指定するには:
「アプリケーション」ウィンドウで、モーダル・ダイアログでレンダリングするために、タスク・フロー・コール・アクティビティを含むタスク・フローをダブルクリックします。
ダイアグラム・エディタで、タスク・フロー・コール・アクティビティを選択します。
「プロパティ」ウィンドウで「動作」セクションを開き、「「別名実行」ダイアログ」ドロップダウン・リストから「true」を選択します。
「ダイアログ戻り値」フィールドで、ターゲット・バインド・タスク・フローに指定した戻り値の定義の名前を入力します。
バインド・タスク・フローで戻り値の定義の指定方法の詳細は、22.4項「バインド・タスク・フローの戻り値の構成」を参照してください。
「アプリケーション」ウィンドウで、モーダル・ダイアログを起動するページをダブルクリックします。
設計エディタで入力コンポーネントを選択し、「プロパティ」ウィンドウで「動作」セクションを開いて、「PartialTriggers」フィールドのEL式を指定します。
指定したEL式によりコマンド・コンポーネントが識別され、そのコマンド・コンポーネントの戻り値が受け入れられて、バッキングBeanが指定されます。たとえば、次のような構文を使用してEL式を入力します。
#{pageFlowScope.backingBean.gotoModalDialog}
gotoModalDialog
は、コマンド・コンポーネントを識別します。
設計エディタでコマンド・コンポーネントを選択し、「プロパティ」ウィンドウで「動作」セクションを開いて、「ReturnListener」フィールドの値としてページのバッキングBeanの戻りリスナー・メソッドを参照するEL式を入力します。
指定した戻りリスナー・メソッドにより、エンド・ユーザーがモーダル・ダイアログを閉じたときに生成される戻りイベントが処理されます。Summit ADFタスク・フロー・サンプル・アプリケーションで、Orders.jsff
ページ・フラグメントのコマンド・コンポーネントは次のEL式を指定します。
#{viewScope.OrdersBackingBean.onShuttleTaskFlowReturn}
エンド・ユーザーがモーダル・ダイアログを起動するページを構成すると、エンド・ユーザーがそのモーダル・ダイアログを終了した後にリフレッシュできます。モーダル・ダイアログが値を戻すか、エンド・ユーザーがモーダル・ダイアログの制御を使用してページ内の既存のデータを編集する場合は、この動作の構成が必要な場合があります。
この機能を実装するには、モーダル・ダイアログを起動するコマンド・コンポーネントを構成して、戻りイベントをリスニングします。戻りイベントを取得すると、ページ上で部分ページ・レンダリング・イベントを実行するバッキングBeanメソッドが起動されます。例25-1 は、モーダル・ダイアログを起動し、戻りイベントをリスニングするbutton
コンポーネントを示しています。
例25-1 バッキングBeanメソッドを参照するReturnListener属性
<af:button text="Edit" id="b1" binding="#{backingBeanScope.backing_launch_page.b1}" action="edit" useWindow="true" returnListener="#{backingBeanScope.backing_launch_page.backFromPopup}"/>
button
コンポーネントのreturnListener
属性では、モーダル・ダイアログの起動により発生する戻りイベントがリスニングされます。戻りイベントを取得すると、例25-2のようにバッキングBeanメソッドが起動されます。
例25-2 部分ページ・イベントを起動するバッキングBeanメソッド
public void backFromPopup(ReturnEvent returnEvent) {
AdfFacesContext adfFacesContext;
adfFacesContext = AdfFacesContext.getCurrentInstance();
adfFacesContext.addPartialTarget(this.getF1());
}
バッキングBeanメソッド(backFromPopup
)では、戻りイベントが引数として取得され、例では、ページ内のフォーム上で部分ページ・レンダリング・イベントが起動されます。
始める前に:
タスク・フロー内のビュー・アクティビティと関連付けられたページから起動するモーダル・ダイアログの他のオプションの構成方法を理解しておくと役に立つ場合があります。詳細は、25.2項「モーダル・ダイアログ内でのバインド・タスク・フローの実行」を参照してください。
また、他のタスク・フローの機能およびダイアログ・フレームワークの機能を使用して追加可能な別の機能を理解しておくと役に立つ場合があります。詳細は、25.1.1項「アプリケーションのユース・ケースと例でのダイアログの使用」を参照してください。
モーダル・ダイアログが戻った後にページをリフレッシュするには:
「アプリケーション」ウィンドウで、モーダル・ダイアログでレンダリングするバインド・タスク・フローを起動するタスク・フローをダブルクリックします。
ダイアグラムで、エンド・ユーザーがコマンド・コンポーネントを起動しモーダル・ダイアログを開始するページを参照するビュー・アクティビティをダブルクリックします。
設計エディタで、コマンド・コンポーネントを選択します。
「プロパティ」ウィンドウで「動作」セクションを開き、「セカンダリ・ウィンドウ」ラベルの下にある「ReturnListener」フィールドで、JDeveloperによる生成が必要なバッキングBeanメソッドの名前を指定するプロパティ・フィールドにカーソルを移動すると表示されるアイコンから「編集」を選択します。
編集プロパティ: ReturnListenerダイアログで、「マネージドBean」フィールドの横にある「新規」をクリックします。
「マネージドBeanの作成」ダイアログで、Beanおよびクラスに名前を付け、Beanのスコープを設定し、「OK」をクリックします。
編集プロパティ: ReturnListenerダイアログで、「メソッド」フィールドの横にある「新規」をクリックします。
「メソッドの作成」ダイアログで、メソッドに名前を付け、「OK」をクリックします。
編集プロパティ: ReturnListenerダイアログで、「OK」をクリックします。
「アプリケーション」ウィンドウで、「アプリケーション・ソース」を開いた後に、手順3から9で作成したバッキングBeanクラスとメソッドを含むパッケージを開きます。
例25-2のようにメソッド本体を記述して、ページ上で部分ページ・レンダリング・イベントを起動します。
Fusion Webアプリケーションがモードレス・ダイアログ(タスク・フロー以外の非モーダル・ダイアログ)をレンダリングし、タスク・フローなどのADFコントローラの機能も使用する場合は、faces-config.xml
ファイルではなく、アプリケーションのadfc-config.xml
ファイルの制御フロー・ルールにdialog:syntax
を指定します。25.3項「バインド・タスク・フローのかわりとしてのADF Facesダイアログ・フレームワークの使用」で説明するように、使用するFusion WebアプリケーションでADFコントローラ機能を使用しない場合は、faces-config.xml
ファイル内のナビゲーション・ルールにdialog:syntax
を指定します。
例25-3は、adfc-config.xml
ファイルに指定できる内容の例を示します。
例25-3 dialog:syntaxを使用したadfc-config.xmlファイル
<?xml version="1.0" encoding="windows-1252" ?> <adfc-config xmlns="http://xmlns.oracle.com/adf/controller" version="1.2" id="__1"> <view id="view1" <page>/view1.jsf</page> </view> <view id="dialog"> <page>/dialog/untitled1.jsf</page> </view> <control-flow-rule> <from-activity-id>test</from-activity-id> <control-flow-case> <from-outcome>dialog:test</from-outcome <to-activity-id>dialog</to-activity-id> </control-flow-case> </adfc-config>
ADF Facesダイアログ・フレームワークを使用すると、ADF Controllerおよびタスク・フローを使用しないアプリケーションで、モーダル・ダイアログおよびモードレス・ダイアログを作成できます。このダイアログ・フレームワークでは、1つまたは一連のページを現在のページとして同じウィンドウ内に(同じビューIDで)表示するのではなく、新しいブラウザ・ウィンドウに表示できます。状況によっては、一連のインライン・ダイアログ(親ページの一部でありながら独自のフローを持つ一方で、別個のビューIDを使用しないダイアログ)の使用が検討される可能性もあります。これは、ポップアップをサポートしないアプリケーション(クライアント・デバイス上で稼働するアプリケーションや第47章「アクティブ・データ・サービスの使用」で説明するアクティブ・データ・サービスを使用するアプリケーションなど)では重要です。通常、JavaScriptを使用してダイアログを開き、プロセスを管理する必要があります。ダイアログ・フレームワークを使用するADF Facesでは、JavaScriptを使用せずに簡単にダイアログやプロセスを管理したり、新しいブラウザ・ウィンドウを開くことができます。
注意: 使用するアプリケーションでADF ControllerとともにFusionテクノロジ・スタックを使用する場合は、タスク・フローを使用して別個のウィンドウ(つまり複数のダイアログ・プロセス)で起動するダイアログを作成する必要があります。詳細は、25.2項「モーダル・ダイアログ内でのバインド・タスク・フローの実行」を参照してください。 |
受注を確認しようとするユーザーにログインを要求する単純なアプリケーションについて考えてみます。図25-2は、5つのページ(login.jspx
、orders.jspx
、new_account.jspx
、account_details.jspx
およびerror.jspx
)からなるアプリケーションのページ・フローを示しています。
既存のユーザーが正常にログインすると、アプリケーションにより「Orders」ページが表示され、ユーザーの注文が(存在していれば)表示されます。ユーザーが正常にログインできなかった場合は、図25-3のように、別個のポップアップ・ダイアログ・ウィンドウに「エラー」ページが表示されます。
「Error」ページには「Cancel」ボタンがあります。ユーザーが「取消」をクリックすると、ポップアップ・ダイアログが閉じ、アプリケーションは図25-4に示す「ログイン・ページ」および元のフローに戻ります。
新規ユーザーが「ログイン・ページ」で新規ユーザー・リンクをクリックすると、新しいウィンドウのポップアップ・ダイアログに新規アカウント・ページが表示されます(図25-5を参照)。
ファースト・ネームやラスト・ネームなどの情報を入力した後、ユーザーが「Details」ボタンをクリックすると、同じポップアップ・ダイアログ内に「Account Details」ページが表示されます(図25-6)。ユーザーは「Account Details」ページでその他の情報を入力し、新しいログイン・アカウントのパスワードを確認入力します。「Account Details」ページには、2つのボタン(「Cancel」および「Done」)があります。
この新規ユーザーが新規ログイン・アカウントの作成手順に進まずに「取消」をクリックした場合は、ポップアップ・ダイアログが閉じてアプリケーションは「ログイン・ページ」に戻ります。新規ユーザーが「終了」をクリックした場合は、ポップアップ・ダイアログが閉じ、アプリケーションはユーザー名」フィールドにユーザーの名が移入された「ログイン・ページ」(図25-7を参照)に戻ります。この段階で、新規ユーザーは新しいパスワードを入力し、正常にログインできるようになります。
注意: ダイアログ・フレームワークを使用して、一度に複数のダイアログを開くことや、ベース・ページと存続期間が異なるダイアログを起動することはしないでください。 |
アプリケーションでのダイアログ・ページ・フローのサポートを容易にするために、ADF Facesにはアクション・コンポーネントのダイアログ機能(commandMenuItem
およびbutton
など)が組み込まれています。アクション・コンポーネントからの新しいフローでページを開くかどうかをADF Facesに認識させるには、次の条件を満たす必要があります。
dialog:
で始まる結果を持つJSFナビゲーション・ルールが存在していること
コマンド・コンポーネントのアクション結果がdialog:
で始まっていること
コマンド・コンポーネントのuseWindow
属性がtrue
であること
注意:
|
ダイアログに表示されるページは通常のJSFページですが、この章では外部ダイアログの実装方法を説明する目的で、ポップアップ・ダイアログに表示されるページをダイアログ・ページおよびダイアログを起動するページを元のページと呼びます。ダイアログ・プロセスは、元のページによって(1つまたは一連のダイアログ・ページを含む)ダイアログが起動すると開始され、ユーザーがダイアログを閉じて元のページに戻ると終了します。
アプリケーションでダイアログ・ページ・フローを作成するには:
ダイアログを開くためのJSFナビゲーション・ルールを定義します。
ダイアログの起動元のJSFページを作成します。
ダイアログ・ページを作成し、ダイアログ値を返します。
値をダイアログに渡します(オプション)。
戻り値を処理します。
これらの操作は、任意の順序で実行できます。
ダイアログ・フローのナビゲーションを管理するには、特殊なdialog:
結果を持つ標準的なJSFナビゲーション・ルールを定義します。
ダイアログを開くためのゲーション・ルールを定義するには:
「アプリケーション」ウィンドウで、「WEB-INF」ノードを開いて、「adfc-config.xml」をダブルクリックします。
ダイアグラム・エディタで、元のページおよびダイアログ・ページのページ・フローを作成します。
詳細は、20.4.1項「タスク・フローに制御フロー・ルールを追加する方法」を参照してください。
ダイアログ・ページのナビゲーション・ルールを作成する場合、結果がdialog:
で始まる必要があります。たとえば、図25-2のログイン・サンプル・アプリケーションの場合、「ログイン・ページ」から新規アカウント・ダイアログ・ページに渡される結果は、dialog:newAccount
です。
実行時に、それぞれのダイアログ・ナビゲーション・ルールによって、指定したページが元のページ内に表示されるだけです。しかし、dialog:
アクション結果を持つコマンド・コンポーネントを使用し、useWindow
属性をtrue
に設定した場合は、ADF Facesによりダイアログ内にページが開かれます。
元のページで、ダイアログを起動するコマンド・コンポーネントを使用する必要があります。コマンド・コンポーネントのアクション値は、起動されるダイアログに対する結果であることが必要です。
始める前に:
構成する属性がADF Facesダイアログ・フレームワークの機能に与える影響を理解しておくと役に立つ場合があります。詳細は、25.1項「アプリケーションでのダイアログの使用について」を参照してください。
他のOracle ADF機能を使用して追加できる機能を理解しておくことも役立ちます。詳細は、25.1.2項「アプリケーションでダイアログを使用するための追加の機能」を参照してください。
次のタスクを完了する必要があります。
ダイアログを開くJSFページを作成するには:
「アプリケーション」ウィンドウで、JSFページをダブルクリックします。
「コンポーネント」ウィンドウの「ADF Faces」ページで、「一般コントロール」パネルからコマンド・コンポーネント(ボタンなど)をJSFページ上にドラッグ・アンド・ドロップします。
コマンドの追加の詳細は、『Oracle ADF FacesによるWebユーザー・インタフェースの開発』のナビゲーションのボタンとリンクの使用に関する項を参照してください。
コマンド・コンポーネントに属性を設定する場合の注意点は、次のとおりです。
Action: 25.3.1項「ダイアログを開くためのJSFナビゲーション・ルールの定義方法」で作成したように、ダイアログにナビゲートする結果にaction属性を設定します。
ヒント: actionの値は、静的文字列またはマネージドBean上のメソッドの戻り値にすることができます。 |
たとえば、「ログイン・ページ」のコマンド・コンポーネントのaction属性は、戻される結果に基づいて注文ページまたは「エラー」ダイアログ・ページのどちらにナビゲートするかを決定するメソッドにバインドされます。メソッドがdialog:error
を戻した場合は、「エラー」ダイアログが開きます。メソッドがsuccessを戻した場合、ユーザーは「Orders」ページに移動します。
ActionListener: action属性の設定の代替として、actionListener
属性を構成して、次のクラスのインスタンスからlaunchDialog
メソッドを起動します。
oracle.adf.view.rich.context.AdfFacesContext
launchDialog
メソッドおよびAdfFacesContext
クラスの詳細は、Oracle ADF Faces Java APIリファレンスを参照してください。
UseWindow: ダイアログを開くためにtrue
に設定します。
ヒント:
|
WindowHeightおよびWindowWidth: ダイアログ・ウィンドウの目的のサイズを設定します。これらの値により、ダイアログのポップアップ・コンポーネントのcontentWidth
およびcontentHeight
属性が設定されます。
ヒント: ユーザーは実行時にこれらの属性の値を変更できますが、アプリケーションが変更の永続性を使用するように構成されていないかぎり、ユーザーがページを終了した時点で、それらの値は保持されなくなります。変更の永続性の有効化および使用に関する詳細は、『Oracle ADF FacesによるWebユーザー・インタフェースの開発』の「JSFページでのユーザー・カスタマイズの許可」の章を参照してください。 |
PartialSubmit: trueに設定します。こうすることで、ポップアップ・ダイアログが表示されたときに元のページがリロードされることがありません(このため、一瞬表示されることもありません)。
WindowEmbedStyle: 元のページに属するポップアップでダイアログを開く場合はinlineDocument
に設定します。ダイアログを別個のブラウザで開く場合は、window
に設定します。
WindowModalityType: ダイアログをモーダルにする場合は、applicationModal
に設定します。モーダル・ダイアログの場合、ダイアログを閉じるまで、ユーザーは元のページに戻れません。ユーザーが元のページとダイアログの間を行き来できるようにする場合は、modeless
に設定します。
コマンド・コンポーネントはダイアログを開くとき、LaunchEvent
イベントを配信します。LaunchEvent
イベントは、ポップアップ・ダイアログを開くコンポーネントと、ダイアログ・プロセスの開始時に表示するコンポーネント・ツリーのルートに関する情報を格納しています。LaunchEvent
は、パラメータのマップをダイアログに渡すこともできます。詳細は、25.3.5項「ダイアログに値を渡す方法」を参照してください。
ダイアログ・ページは他のJSFページとほとんど同じですが、1つのみ例外があります。ダイアログ・ページでは、ダイアログ・プロセスが終了したとき(つまり、ユーザーがダイアログまたは一連のダイアログを閉じたとき)にADF Facesに通知する方法を指定する必要があります。
たとえば、新規アカウント・ページとアカウントの詳細ページは、同じダイアログ・プロセスに属しています。ダイアログ・プロセスには必要な数だけページを含めることができ、ダイアログ・プロセスが終了したことをフレームワークに通知するのは1回のみでかまいません。
これは、ダイアログを閉じるためのコマンド・コンポーネントに対する子としてreturnActionListener
タグを使用して、宣言的に行います。ただし、戻り値または他のアクション・イベント処理を提供する必要がある場合は、コマンド・コンポーネントのactionListener
属性をAdfFacesContext.returnFromDialog()
メソッドをコールするメソッドにバインドできます。このメソッドにより、パラメータのjava.lang.Object
またはjava.util.Map
の形式で戻り値を返すことができます。値の戻し先を把握しておく必要はありません(ADF Facesで自動的に処理されます)。
実行時、AdfFacesContext.returnFromDialog()
メソッドは、ユーザーがダイアログを閉じるとADF Facesに通知します。このメソッドは、ダイアログ・ページがポップアップ・ダイアログに表示されているかメイン・ウィンドウに表示されているかに関係なく、コールできます。ポップアップ・ダイアログが使用されている場合、ADF Facesにより自動的にそのポップアップ・ダイアログが閉じられます。
始める前に:
構成する属性がADF Facesダイアログ・フレームワークの機能に与える影響を理解しておくと役に立つ場合があります。詳細は、25.1項「アプリケーションでのダイアログの使用について」を参照してください。
他のOracle ADF機能を使用して追加できる機能を理解しておくことも役立ちます。詳細は、25.1.2項「アプリケーションでダイアログを使用するための追加の機能」を参照してください。
ダイアログ・ウィンドウを閉じて任意で値を戻すには:
「アプリケーション」ウィンドウで、ダイアログ・ページをダブルクリックします。
「コンポーネント」ウィンドウの「ADF Faces」ページで、「一般コントロール」パネルからコマンド・コンポーネント(ボタンなど)をダイアログ・ページ上にドラッグ・アンド・ドロップします。
コマンドの追加の詳細は、『Oracle ADF FacesによるWebユーザー・インタフェースの開発』のナビゲーションのボタンとリンクの使用に関する項を参照してください。
コマンド・コンポーネントを使用してウィンドウを閉じる場合は、「プロパティ」ウィンドウで「動作」セクションを開き、「即時」ドロップダウン・リストから「true」を選択します。
コマンド・コンポーネントを使用してダイアログ・プロセス内の別のページに移動する場合は、標準ナビゲーションのようにコマンド・コンポーネントを構成します。これを実行するには、「プロパティ」ウィンドウで「共通」セクションを開き、「UseWindow」ドロップダウン・リストから「false」を選択します。これにより、前のページの状態を保持しながら、同じダイアログ・ウィンドウに次のページが表示されます。
ダイアログ・プロセスを終了してダイアログを閉じる必要があるが、値を戻す必要はない場合は、「コンポーネント」ウィンドウの「操作」パネルで、「リスナー」グループの「アクション・リスナーを返す」をドラッグし、これを子としてコマンド・コンポーネントにドロップします。
returnActionListener
タグにより、AdfFacesContext
オブジェクト上のreturnFromDialog
メソッドがコールされます(バッキングBeanコードは不要です)。
このaf:returnActionListener
タグでは属性は使用されません。af:button
コンポーネントのimmediate
属性はtrue
に設定されており、これによって、ユーザーが必須フィールドの「パスワード」および「パスワードの確認」に値を入力せずに「取消」をクリックした場合は、アプリケーションの起動フェーズではなく、リクエスト値の適用フェーズでデフォルトのJSF ActionListener
が実行されるため、入力の検証はバイパスされます。詳細は、『Oracle ADF FacesによるWebユーザー・インタフェースの開発』の「ADF FacesでのJSFライフサイクルの使用」の章を参照してください。
ダイアログ・プロセスを終了して値を戻す必要がある場合は、action
イベントを処理し、AdfFacesContext
の現在のインスタンスのreturnFromDialog
メソッドを使用して必要な値を戻す、マネージドBean上のメソッドを作成します。
注意:
|
たとえば、ユーザーが「Account Details」ページの「Done」をクリックした場合、プロセスは終了し、ユーザーの入力値が返されます。例25-4は、「終了」ボタンがバインドされているイベント・ハンドラ・メソッドのコードを示しています。このメソッドは顧客情報を取得し、その後、不正なパスワードに対するFacesメッセージを作成するか、新しい顧客オブジェクトに値を設定してそのオブジェクトを戻します。
例25-4 マネージドBean内の「終了」ボタンに対するアクション・リスナー・メソッド
public void done(ActionEvent e)
{
AdfFacesContext afContext = AdfFacesContext.getCurrentInstance();
String firstname = afContext.getPageFlowScope().get("firstname").toString();
String lastname = afContext.getPageFlowScope().get("lastname").toString();
String street = afContext.getPageFlowScope().get("street").toString();
String zipCode = afContext.getPageFlowScope().get("zipCode").toString();
String country = afContext.getPageFlowScope().get("country").toString();
String password = afContext.getPageFlowScope().get("password").toString();
String confirmPassword =
afContext.getPageFlowScope().get("confirmPassword").toString();
if (!password.equals(confirmPassword))
{
FacesMessage fm = new FacesMessage();
fm.setSummary("Confirm Password");
fm.setDetail("You've entered an incorrect password. Please verify that you've
entered a correct password!");
FacesContext.getCurrentInstance().addMessage(null, fm);
}
else
{
//Get the return value
Customer cst = new Customer();
cst.setFirstName(firstname);
cst.setLastName(lastname);
cst.setStreet(street);
cst.setPostalCode(zipCode);
cst.setCountry(country);
cst.setPassword(password);
// And return it
afContext.getCurrentInstance().returnFromDialog(cst, null);
}
}
ダイアログが閉じると、ADF Facesは戻りイベント(ReturnEvent
)を生成します。AdfFacesContext.returnFromDialog()
メソッドは、戻り値を戻りイベントのプロパティとして送信します。この戻りイベントは、ダイアログを開いたコマンド・コンポーネント(たとえば、「ログイン」ページの「新規ユーザー」リンク)に登録されている戻りリスナー(ReturnListener
)に配信されます。戻り値を処理する方法は、25.3.7項「戻り値の処理方法」を参照してください。
ダイアログに値を渡すには、LaunchEvent
のハンドラ・メソッドにバインドされているLaunchListener
リスナーを使用します。getDialogParameters()
メソッドを使用すると、キーと値のペアを使用してパラメータをMap
に追加できます。
始める前に:
構成する属性がADF Facesダイアログ・フレームワークの機能に与える影響を理解しておくと役に立つ場合があります。詳細は、25.1項「アプリケーションでのダイアログの使用について」を参照してください。
他のOracle ADF機能を使用して追加できる機能を理解しておくことも役立ちます。詳細は、25.1.2項「アプリケーションでダイアログを使用するための追加の機能」を参照してください。
ダイアログに値を渡すには:
「アプリケーション」ウィンドウで、ダイアログ・ページに移動するために使用されるコマンド・コンポーネントを含むJSFページをダブルクリックします。
設計エディタで、ダイアログ・ページに移動するために使用されるコマンド・コンポーネントを選択します。
「プロパティ」ウィンドウで、「動作」セクションを開きます。
「LaunchListener」プロパティ・フィールドにカーソルを置いたときに表示されるアイコンから、「編集」を選択します。
編集プロパティ: LaunchListenerダイアログで、「マネージドBean」フィールドの横の「新規」をクリックします。
「マネージドBeanの作成」ダイアログで、Beanおよびクラスに名前を付け、Beanのスコープを設定し、「OK」をクリックします。
編集プロパティ: LaunchListenerダイアログで、「メソッド」の横の「新規」をクリックします。
「メソッドの作成」ダイアログで、メソッドに名前を付けて「OK」をクリックし、「OK」をクリックして編集プロパティ: LaunchListenerダイアログを閉じます。
「アプリケーション」ウィンドウで、「アプリケーション・ソース」を開いた後に、手順3から8で作成したバッキングBeanクラスとメソッドを含むパッケージを開きます。
ソース・エディタで、getDialogParameters
メソッドを使用してダイアログからパラメータを取得するLaunchEvent
に対して、ハンドラ・メソッドを記述します。
たとえば、サンプル・アプリケーションでは、新規ユーザーが「ログイン・ページ」の「ユーザー名」フィールドに名前を入力して、新規ユーザー・リンクをクリックできます。ポップアップ・ダイアログ内に「New Account」ダイアログ・ページが表示されると、「First Name」入力フィールドには、「Login」ページで入力された名前が自動的に移入されます。これを実現するには、例25-5のように、getDialogParameters
メソッドを使用してダイアログに「ユーザー名」フィールドの値を入力するハンドラを作成します。
例25-5 バッキングBean内の「New User」リンクに対するLaunchEventリスナー・メソッド
public void handleLaunch(LaunchEvent event)
{
//Pass the current value of the field into the dialog
Object usr = username;
event.getDialogParameters().put("firstname", getUsername());
}
// Use by inputText value binding
private String username;
public String getUsername()
{
return username;
}
public void setUsername(String username)
{
this.username = username;
}
「アプリケーション」ウィンドウで、ダイアログ・ページをダブルクリックします。
ダイアログ・ページで、pageFlowScope
オブジェクトを使用して#{pageFlowScope.someKey}
という形式の特殊なEL式を介してキーと値を取得します(例25-6を参照)。
ADF Facesでは、プロセスは常に、ダイアログが起動されたページのpageFlowScope
内に存在するすべての値のコピーを取得します。getDialogParameters()
メソッドがパラメータをMap
に追加すると、これらのパラメータもpageFlowScope
内で使用可能になり、ダイアログ・プロセス内のすべてのページは、EL式を介してpageFlowScope
オブジェクトを参照することによりpageFlowScope
から値を取得できます。
注意:
|
ダイアログが閉じたときに戻り値を処理するには、ダイアログを起動したコマンド・コンポーネントで戻りリスナーを定義します。たとえば、サンプル・アプリケーションでは、新規ユーザーが情報を入力した場合、その情報をダイアログ・プロセスの完了時に処理する必要があります。
始める前に:
構成する属性がADF Facesダイアログ・フレームワークの機能に与える影響を理解しておくと役に立つ場合があります。詳細は、25.1項「アプリケーションでのダイアログの使用について」を参照してください。
他のOracle ADF機能を使用して追加できる機能を理解しておくことも役立ちます。詳細は、25.1.2項「アプリケーションでダイアログを使用するための追加の機能」を参照してください。
戻り値を処理するには:
「アプリケーション」ウィンドウで、ダイアログ・ページに移動するために使用されるコマンド・コンポーネントを含むJSFページをダブルクリックします。
設計エディタで、ダイアログ・ページに移動するために使用されるコマンド・コンポーネントを選択します。
「プロパティ」ウィンドウで、「動作」セクションを開きます。
「ReturnListener」プロパティ・フィールドにカーソルを置いたときに表示されるアイコンから、「編集」を選択します。
編集プロパティ: ReturnListenerダイアログで、「マネージドBean」フィールドの横にある「新規」をクリックします。
「マネージドBeanの作成」ダイアログで、Beanおよびクラスに名前を付け、Beanのスコープを設定し、「OK」をクリックします。
編集プロパティ: ReturnListenerダイアログで、「メソッド」フィールドの横にある「新規」をクリックします。
「メソッドの作成」ダイアログで、メソッドに名前を付けて「OK」をクリックし、「OK」をクリックして編集プロパティ: LaunchListenerダイアログを閉じます。
「アプリケーション」ウィンドウで、「アプリケーション・ソース」を開いた後に、手順3から8で作成したバッキングBeanクラスとメソッドを含むパッケージを開きます。
ソース・エディタで、returnEvent
用のハンドラ・メソッドを記述します。getReturnValue()
メソッドを使用して戻り値を取得します。戻り値は自動的にReturnEvent
のプロパティとして追加されるためです。
例25-7に、戻り値を処理する戻りリスナー・メソッドのコードを示します。
例25-7 バッキングBean内の「New user」リンクに対する戻りリスナー・メソッド
public void handleReturn(ReturnEvent event) { if (event.getReturnValue() != null) { Customer cst; String name; String psw; cst = (Customer)event.getReturnValue(); name = cst.getFirstName(); psw = cst.getPassword(); CustomerList.getCustomers().add(cst); inputText1.setSubmittedValue(null); inputText1.setValue(name); inputText2.setSubmittedValue(null); inputText2.setValue(psw); } }