Oracle Fusion Middleware Oracle Application Development Framework Fusion開発者ガイド 11gリリース1 (11.1.1.7.0) B52028-05 |
|
前 |
次 |
この章では、ADFコントローラおよびADFタスク・フローを使用したダイアログの作成方法、およびその代替方法であるADFアプリケーションでのADF Facesダイアログ・フレームワークの使用方法を説明します。
この章の内容は次のとおりです。
エンド・ユーザーの現在のページを表示するブラウザ・ウィンドウ外のセカンダリ・ブラウザ・ウィンドウにエンド・ユーザーへの情報を表示する場合は、ダイアログを使用します。たとえば、プライマリ・ブラウザ・ウィンドウ内のタスクに関するヘルプ情報を エンド・ユーザーに対して表示する場合や、エンド・ユーザーが値のリストから値を選択できるようにする場合です。このヘルプ情報の例は、モードレス・ダイアログに適したユースケースです。モードレス・ダイアログを使用すると、エンド・ユーザーはプライマリ・ウィンドウとダイアログの両方で同時に作業できます。エンド・ユーザーに値を選択させるユースケースの場合は、モーダル・ダイアログの方が適しています。モーダル・ダイアログを使用した場合、ダイアログで要求されたアクション(例: 値の選択)を実行しないかぎり、エンド・ユーザーはそのダイアログを起動したページにアクセスできません。
エンド・ユーザーに対してモードレス・ダイアログを構成する場合は、ADF Facesダイアログ・フレームワークを使用します。エンド・ユーザーに対してモーダル・ダイアログを構成する予定の場合は、1つ以上のダイアログを起動するために、ADFコントローラのバインド・タスク・フローを構成します。
モーダル・ダイアログ内で実行するバインド・タスク・フローを構成し、エンド・ユーザーの入力を取得し、取得した入力とともに、バインド・タスク・フローをコールしたビュー・アクティビティに戻ることができます。
図19-1に、必要な構成の例を示します。
既存のタスク・フローのバインド・タスク・フローに、ビュー・アクティビティおよびタスク・フロー・コール・アクティビティを追加します。ビュー・アクティビティにより、エンド・ユーザーがアクションを起動できるページが起動され、その結果、モーダル・ダイアログに表示されるバインド・タスク・フローが起動します。
バインド・タスク・フローをモーダル・ダイアログ・ボックス内で実行するには:
既存のタスク・フローのダイアグラム・エディタでビュー・アクティビティをダブルクリックし、関連付けられているページを開きます。
バインド・タスク・フローをモーダル・ダイアログ・ボックスとして起動するために、実行時にエンド・ユーザーがクリックするUIコンポーネント(例: commandButton
コンポーネント)を選択します。
プロパティ・インスペクタで「共通」セクションを開き、action
属性をバインド・タスク・フローを起動するための制御フロー・ケースに設定します。
図19-1のcallTarget
は、その一例です。
ポップアップ・ダイアログ内でバインド・タスク・フローを起動するために、useWindow
属性をtrue
に設定します。
既存のタスク・フローのダイアグラム・エディタに戻り、タスク・フロー・コール・アクティビティを選択します。
プロパティ・インスペクタで「動作」セクションを開き、バインド・タスク・フローをダイアログとして実行するためにrun-as-dialog
属性をtrue
に設定します。
display-type
属性については、外部ブラウザ・ウィンドウにダイアログをレンダリングする場合はexternal-window
(デフォルト値)、同じブラウザ・ウィンドウにダイアログをレンダリングする場合はinline-popup
を選択します。
モーダル・ダイアログにレンダリングされるバインド・タスク・フローを構成して、エンド・ユーザーがモーダル・ダイアログを閉じたときに、バインド・タスク・フローを起動したビュー・アクティビティに値を戻すことができます。戻された値は、たとえば、ビュー・アクティビティに関連付けられているページ上の入力コンポーネントに表示できます。
入力および出力パラメータを宣言するために、タスク・フロー・コール・アクティビティによってコールされるバインド・タスク・フローを構成する必要があります。詳細は、16.3項「ADFバインド・タスク・フローへのパラメータの渡し方」を参照してください。
コマンド・コンポーネント(例: commandButton
コンポーネント)のreturnListener
属性の値として、1つの引数を持つメソッド(戻りイベント)に対するメソッド・バインディングを指定します。returnListener
属性により、ビュー・アクティビティに関連付けられているページ上の入力コンポーネントで、この値が設定されます。入力コンポーネントのバッキングBeanを指定し、入力コンポーネントのpartialTrigger
属性をコマンド・コンポーネントのIDに設定します。
さらに、次を指定する必要があります。
コール先バインド・タスク・フローに戻り値の定義を指定し、 コール先バインド・タスク・フローの終了時に戻り値を取得する場所を示します。
既存のタスク・フローのタスク・フロー・アクティビティに戻り値を指定し、 既存のタスク・フローが戻り値を検出できる場所を示します。
詳細は、16.4項「戻り値の指定」を参照してください。
バッキングBean、入力コンポーネントおよびコマンド・コンポーネントの作成に関する詳細は、『Oracle Fusion Middleware Oracle Application Development Framework Webユーザー・インタフェース開発者ガイド』の「入力コンポーネントの使用およびフォームの定義」を参照してください。
作業を始める前に、次のようにします。
モーダル・ダイアログで実行するためにバインド・タスク・フローを構成します。詳細は、19.2.1項「モーダル・ダイアログ内でのバインド・タスク・フローの実行方法」を参照してください。
戻り値を指定するには:
既存のタスク・フローのダイアグラム・エディタで、タスク・フロー・コール・アクティビティを選択します。
プロパティ・インスペクタの「動作」セクションを開き、run-as-dialog
属性をtrue
に設定します。
dialog-return-value
を、ターゲット・バインド・タスク・フローに対して指定した戻り値の定義の名前に設定します。
バインド・タスク・フローで戻り値の定義を指定する方法は、16.4項「戻り値の指定」を参照してください。
「アプリケーション・ナビゲータ」で、モーダル・ダイアログを起動するページをダブルクリックします。
ページ上の入力コンポーネントを選択し、プロパティ・インスペクタの「動作」セクションを開いてpartialTriggers
属性のEL式を指定します。
指定したEL式によりコマンド・コンポーネントが識別され、そのコマンド・コンポーネントの戻り値が受け入れられて、バッキングBeanが指定されます。たとえば、次のような構文を使用してEL式を入力します。
#{pageFlowScope.backingBean.gotoModalDialog}
gotoModalDialog
は、コマンド・コンポーネントを識別します。
コマンド・コンポーネントを選択し、プロパティ・インスペクタの「動作」セクションを開きます。
「セカンダリ・ウィンドウ」で、returnListener
属性の値として、ページのバッキングBeanの戻りリスナー・メソッドを参照するEL式を入力します。
指定した戻りリスナー・メソッドにより、エンド・ユーザーがモーダル・ダイアログを閉じたときに生成される戻りイベントが処理されます。次のような構文を使用してEL式を入力します。
#{pageBean.listenerMethod}
バインド・タスク・フローは、ADFリージョン内で実行できます。ADFリージョンは、af:popup
UIコンポーネント内にあってもかまいません。
使用するFusion Webアプリケーションでタスク・フローなどのADFコントローラ機能を使用する場合は、faces-config.xml
ファイル内のナビゲーション・ルールにdialog:syntax
を指定できません。ただし、adfc-config.xml
ファイルに指定する制御フロー・ルールでは、dialog:syntax
を使用できます。
例19-1に、adfc-config.xml
ファイルで指定できる内容の一例を示します。
例19-1 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.jspx</page> </view> <view id="dialog"> <page>/dialog/untitled1.jspx</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コントローラおよびタスク・フローを使用しないアプリケーションで、モーダル・ダイアログおよびモードレス・ダイアログを作成できます。このダイアログ・フレームワークでは、1つまたは一連のページを現在のページとして同じウィンドウ内に(同じビューIDで)表示するのではなく、新しいブラウザ・ウィンドウに表示できます。状況によっては、一連のインライン・ダイアログ(親ページの一部でありながら独自のフローを持つ一方で、別個のビューIDを使用しないダイアログ)の使用が検討される可能性もあります。これは、ポップアップをサポートしないアプリケーション(クライアント・デバイス上で稼働するアプリケーションや第42章「アクティブ・データ・サービスの使用」で説明するアクティブ・データ・サービスを使用するアプリケーションなど)では重要です。通常、JavaScriptを使用してダイアログを開き、プロセスを管理する必要があります。ダイアログ・フレームワークを使用するADF Facesでは、JavaScriptを使用せずに簡単にダイアログやプロセスを管理したり、新しいブラウザ・ウィンドウを開くことができます。
注意: 使用するアプリケーションでADFコントローラとともにFusionテクノロジ・スタックを使用する場合は、タスク・フローを使用して別個のウィンドウ(つまり複数のダイアログ・プロセス)で起動するダイアログを作成する必要があります。詳細は、19.2項「モーダル・ダイアログ内でのバインド・タスク・フローの実行」を参照してください。 |
受注を確認しようとするユーザーにログインを要求する単純なアプリケーションについて考えてみます。図19-2は、5つのページ(login.jspx
、orders.jspx
、new_account.jspx
、account_details.jspx
およびerror.jspx
)からなるアプリケーションのページ・フローを示しています。
既存のユーザーが正常にログインすると、アプリケーションにより「Orders」ページが表示され、ユーザーの注文が(存在していれば)表示されます。ユーザーが正常にログインできなかった場合は、図19-3のように、別個のポップアップ・ダイアログ・ウィンドウに「エラー」ページが表示されます。
「Error」ページには「Cancel」ボタンがあります。ユーザーが「取消」をクリックすると、ポップアップ・ダイアログが閉じ、アプリケーションは図19-4に示す「ログイン・ページ」および元のフローに戻ります。
新規ユーザーが「ログイン・ページ」で新規ユーザー・リンクをクリックすると、新しいウィンドウのポップアップ・ダイアログに新規アカウント・ページが表示されます(図19-5を参照)。
ファースト・ネームやラスト・ネームなどの情報を入力した後、ユーザーが「Details」ボタンをクリックすると、同じポップアップ・ダイアログ内に「Account Details」ページが表示されます(図19-6)。ユーザーは「Account Details」ページでその他の情報を入力し、新しいログイン・アカウントのパスワードを確認入力します。「Account Details」ページには、2つのボタン(「Cancel」および「Done」)があります。
この新規ユーザーが新規ログイン・アカウントの作成手順に進まずに「取消」をクリックした場合は、ポップアップ・ダイアログが閉じてアプリケーションは「ログイン・ページ」に戻ります。新規ユーザーが「終了」をクリックした場合は、ポップアップ・ダイアログが閉じ、アプリケーションはユーザー名」フィールドにユーザーの名が移入された「ログイン・ページ」(図19-7を参照)に戻ります。この段階で、新規ユーザーは新しいパスワードを入力し、正常にログインできるようになります。
注意: ダイアログ・フレームワークを使用して、一度に複数のダイアログを開くことや、ベース・ページと存続期間が異なるダイアログを起動することはしないでください。 |
アプリケーションでのダイアログ・ページ・フローのサポートを容易にするために、ADF Facesにはアクション・コンポーネントのダイアログ機能(commandMenuItem
およびcommandButton
など)が組み込まれています。アクション・コンポーネントからの新しいフローでページを開くかどうかをADF Facesに認識させるには、次の条件を満たす必要があります。
dialog:
で始まる結果を持つJSFナビゲーション・ルールが存在していること
コマンド・コンポーネントのアクション結果がdialog:
で始まっていること
コマンド・コンポーネントのuseWindow
属性がtrue
であること
注意:
|
ダイアログに表示されるページは通常のJSFページですが、この章では外部ダイアログの実装方法を説明する目的で、ポップアップ・ダイアログに表示されるページをダイアログ・ページ、およびダイアログを起動するページを元のページと呼びます。ダイアログ・プロセスは、元のページによって(1つまたは一連のダイアログ・ページを含む)ダイアログが起動すると開始され、ユーザーがダイアログを閉じて元のページに戻ると終了します。
アプリケーションでダイアログ・ページ・フローをサポートするためのタスク:
ダイアログを開くためのJSFナビゲーション・ルールを定義します。
ダイアログの起動元のJSFページを作成します。
ダイアログ・ページを作成し、ダイアログ値を返します。
値をダイアログに渡します(オプション)。
戻り値を処理します。
これらの操作は、任意の順序で実行できます。
ダイアログ・フローのナビゲーションを管理するには、特殊なdialog:
結果を持つ標準的なJSFナビゲーション・ルールを定義します。
ダイアログを開くためのナビゲーション・ルールを定義するには:
adfc-config.xml
ファイルで、元のページおよびダイアログ・ページのページ・フローを作成します。詳細な手順は、14.3.3項「制御フローの追加方法」を参照してください。
ダイアログ・ページのナビゲーション・ルールを作成する場合、結果がdialog:
で始まる必要があります。たとえば、図19-2のログイン・サンプル・アプリケーションの場合、「ログイン・ページ」から新規アカウント・ダイアログ・ページに渡される結果は、dialog:newAccount
です。
実行時に、それぞれのダイアログ・ナビゲーション・ルールによって、指定したページが元のページ内に表示されるだけです。しかし、dialog:
アクション結果を持つコマンド・コンポーネントを使用し、useWindow
属性をtrue
に設定した場合は、ADF Facesによりダイアログ内にページが開かれます。
元のページで、ダイアログを起動するコマンド・コンポーネントを使用する必要があります。コマンド・コンポーネントのアクション値は、起動されるダイアログに対する結果であることが必要です。
ダイアログを開くJSFページの作成方法:
JSFページを作成します。
詳細は、『Oracle Fusion Middleware Oracle Application Development Framework Webユーザー・インタフェース開発者ガイド』のビュー・ページの作成に関する項を参照してください。
コマンド・コンポーネントをページに追加します。
ページへのコマンド・コンポーネントの追加に関する詳細は、『Oracle Fusion Middleware Oracle Application Development Framework Webユーザー・インタフェース開発者ガイド』のナビゲーションのボタンおよびリンクの使用に関する項を参照してください。
コマンド・コンポーネントに属性を設定する場合の注意点は、次のとおりです。
action: 19.3.1項「ダイアログを開くためのJSFナビゲーション・ルールの定義方法」で作成したように、action属性をダイアログにナビゲートする結果に設定します。
ヒント: actionの値は、静的文字列またはマネージドBean上のメソッドの戻り値にすることができます。 |
たとえば、「ログイン・ページ」のコマンド・コンポーネントのaction属性は、戻される結果に基づいて注文ページまたは「エラー」ダイアログ・ページのどちらにナビゲートするかを決定するメソッドにバインドされます。メソッドがdialog:error
を戻した場合は、「エラー」ダイアログが開きます。メソッドがsuccessを戻した場合、ユーザーは注文ページに移動します。
useWindow: ダイアログを開くためにtrue
に設定します。
ヒント: falseに設定した場合、ADF Facesは、現在のページのすべての状態を保存した後、現在のウィンドウ内にダイアログ・ページを表示します(この処理を実現するためにコードを記述する必要はありません)。 |
windowHeightおよびwindowWidth: ダイアログ・ウィンドウの目的のサイズを設定します。これらの値により、ダイアログのポップアップ・コンポーネントのcontentWidth
およびcontentHeight
属性が設定されます。
ヒント: ユーザーは実行時にこれらの属性の値を変更できますが、アプリケーションが変更の永続性を使用するように構成されていないかぎり、ユーザーがページを終了した時点で、それらの値は保持されなくなります。変更の永続性の有効化および使用に関する詳細は、『Oracle Fusion Middleware Oracle Application Development Framework Webユーザー・インタフェース開発者ガイド』の「JSFページでのユーザー・カスタマイズの許可」を参照してください。 |
partialSubmit: trueに設定します。こうすることで、ポップアップ・ダイアログが表示されたときに元のページがリロードされることがありません(このため、一瞬表示されることもありません)。
windowEmbedStyle: 次に表示されるダイアログを元のページに属するポップアップで開く場合は、 inlineDocument
に設定します。次に表示されるダイアログを別個のブラウザで開く場合は、window
に設定します。
windowModalityType: ダイアログをモーダルにする場合は、applicationModal
に設定します。モーダル・ダイアログの場合、ダイアログを閉じるまで、ユーザーは元のページに戻れません。ユーザーが元のページとダイアログの間を行き来できるようにする場合は、modeless
に設定します。
コマンド・コンポーネントはダイアログを開くとき、LaunchEvent
イベントを配信します。LaunchEvent
イベントは、ポップアップ・ダイアログを開くコンポーネントと、ダイアログ・プロセスの開始時に表示するコンポーネント・ツリーのルートに関する情報を格納しています。LaunchEvent
は、パラメータのマップをダイアログに渡すこともできます。詳細は、19.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により自動的にそのポップアップ・ダイアログが閉じられます。
ダイアログ・ウィンドウを閉じて任意で値を戻すには:
ダイアログ・ページにコマンド・コンポーネントを追加します。そのコンポーネントを使用してウィンドウを閉じる場合は、immediate属性をtrue
に設定します。
ボタンを使用してダイアログ・プロセスの別のページにナビゲートする場合は、そのボタンを標準のナビゲーションのように構成して、useWindow
属性をfalse
に設定します(これにより、次のページが同じダイアログ・ウィンドウに表示され、前のページの状態が保持されます)。
ダイアログ・プロセスを終了してダイアログを閉じる必要があるが、値を戻す必要はない場合は、「コンポーネント・パレット」の「操作」パネルから「アクション・リスナーを返す」をドラッグし、コマンド・コンポーネントに対する子としてドロップします。
returnActionListener
タグにより、AdfFacesContext
オブジェクト上のreturnFromDialog
メソッドがコールされます(バッキングBeanコードは不要です)。
このaf:returnActionListener
タグでは属性は使用されません。af:commandButton
コンポーネントのimmediate
属性はtrue
に設定されており、これによって、ユーザーが必須フィールドの「パスワード」および「パスワードの確認」に値を入力せずに「取消」をクリックした場合は、アプリケーションの起動フェーズではなく、リクエスト値の適用フェーズでデフォルトのJSF ActionListener
が実行されるため、入力の検証はバイパスされます。詳細は、『Oracle Fusion Middleware Oracle Application Development Framework Webユーザー・インタフェース開発者ガイド』の「ADF FacesでのJSFライフサイクルの使用」を参照してください。
ダイアログ・プロセスを終了して値を戻す必要がある場合は、action
イベントを処理し、AdfFacesContext
の現在のインスタンスのreturnFromDialog
メソッドを使用して必要な値を戻す、マネージドBean上のメソッドを作成します。
注意:
|
たとえば、ユーザーが「Account Details」ページの「Done」をクリックした場合、プロセスは終了し、ユーザーの入力値が返されます。例19-2は、「終了」ボタンがバインドされているイベント・ハンドラ・メソッドのコードを示しています。このメソッドは顧客情報を取得し、その後、不正なパスワードに対するFacesメッセージを作成するか、新しい顧客オブジェクトに値を設定してそのオブジェクトを戻します。
例19-2 マネージド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);
afContext.getPageFlowScope().clear();
}
}
ダイアログが閉じると、ADF Facesは戻りイベント(ReturnEvent
)を生成します。AdfFacesContext.returnFromDialog()
メソッドは、戻り値を戻りイベントのプロパティとして送信します。この戻りイベントは、ダイアログを開いたコマンド・コンポーネント(たとえば、「ログイン・ページ」の新規ユーザー commandLink
)に登録されている戻りリスナー(ReturnListener
)に配信されます。戻り値を処理する方法は、19.3.7項「戻り値の処理方法」を参照してください。
ダイアログに値を渡すには、LaunchEvent
のハンドラ・メソッドにバインドされているLaunchListener
リスナーを使用します。getDialogParameters()
メソッドを使用すると、キーと値のペアを使用してパラメータをMap
に追加できます。
ダイアログに値を渡すには:
getDialogParameters
メソッドを使用してダイアログからパラメータを取得するLaunchEvent
に対して、ハンドラ・メソッドを作成します。
たとえば、サンプル・アプリケーションでは、新規ユーザーが「ログイン・ページ」の「ユーザー名」フィールドに名前を入力して、新規ユーザー・リンクをクリックできます。ポップアップ・ダイアログ内に「New Account」ダイアログ・ページが表示されると、「First Name」入力フィールドには、「Login」ページで入力された名前が自動的に移入されます。これを実現するには、例19-3のように、getDialogParameters
メソッドを使用してダイアログに「ユーザー名」フィールドの値を入力するハンドラを作成します。
例19-3 バッキング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;
}
次のページへのナビゲートに使用するコマンド・コンポーネントのlaunchListener属性を、手順1で作成したハンドラ・メソッドにバインドします。
例19-4は、launchListener
属性がハンドラ・メソッドにバインドされているcommandLink
コンポーネントのコードを示しています。
例19-4 「Login」ページの入力フィールドと「New user」コマンド・リンク
<af:inputText label="Username" value="#{backing_login.username}"/>
<af:commandLink id="cmdLink" text="New User?"
action="dialog:newAccount"
useWindow="true" partialSubmit="true"
launchListener="#{backing_login.handleLaunch}"
returnListener="#{backing_login.handleReturn}"
windowHeight="200" windowWidth="500" />
生成されるページで、pageFlowScope
オブジェクトを使用して#{pageFlowScope.someKey}
という形式の特殊なEL式を介してキーと値を取得します(例19-5を参照)。
ADF Facesでは、プロセスは常に、ダイアログが起動されたページのpageFlowScope
内に存在するすべての値のコピーを取得します。getDialogParameters()
メソッドがパラメータをMap
に追加すると、これらのパラメータもpageFlowScope
内で使用可能になり、ダイアログ・プロセス内のすべてのページは、EL式を介してpageFlowScope
オブジェクトを参照することによりpageFlowScope
から値を取得できます。
注意:
|
ダイアログが閉じたときに戻り値を処理するには、ダイアログを起動したコマンド・コンポーネントに戻りリスナーを登録します。たとえば、サンプル・アプリケーションでは、新規ユーザーが情報を入力した場合、その情報をダイアログ・プロセスの完了時に処理する必要があります。
戻り値を処理するには:
returnEvent
のハンドラ・メソッドを作成します。getReturnValue()
メソッドを使用して戻り値を取得します。戻り値は自動的にReturnEvent
のプロパティとして追加されるためです。
例19-6に、戻り値を処理する戻りリスナー・メソッドのコードを示します。
例19-6 バッキング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); } }
ダイアログを起動したコマンド・コンポーネントのreturnListener
属性を、手順1で作成したreturnEvent
ハンドラ・メソッドにバインドします。