「ADF Facesコマンド・コンポーネントからのダイアログの起動について」に説明されているように、値をAdfFacesContext.returnFromDialog()
メソッドに渡すことで、ダイアログまたはプロセスから値を取得できます。このトピックでは、LaunchEvent
およびprocessScope
を使用して、親プロセスの値をオーバーライドせずに、ダイアログとの間で値を受け渡す方法について説明します。
ADF Facesでは、ダイアログまたはプロセスを起動しようとすると、LaunchEvent
がキューイングされます。ダイアログに渡すパラメータを追加するには、(ダイアログの起動に使用する)コマンド・コンポーネントにlaunchListener
を登録し、launchEvent
を処理するメソッドでgetDialogParameters()
を使用してダイアログにパラメータのマップを渡します。この方法で追加されたパラメータは、ADF FacesのprocessScope
に自動的に表示されます。プロセスのJSFページでは、#{processScope.someKey}
などのEL式を使用してprocessScope
オブジェクトを参照し、processScope
から値を取得できます。
プロセスでは、LaunchEvent
のすべてのダイアログ・パラメータに加え、起動ページのprocessScope
内のすべての値のコピーを常に取得します。「ADF FacesのprocessScopeについて」に記述されているように、processScope
の値は、現在のプロセスまたはウィンドウ内でのみ参照できます。新しいウィンドウが開いてナビゲーションが開始すると、新しい一連のウィンドウには各自のプロセスが設定されます。各ウィンドウに格納された値は独立したままです。プロセスから戻ると、起動ページのprocessScope
は、プロセスが開始する前のように復元されます。プロセスから値を渡す必要がある場合は、AdfFacesContext.returnFromDialog()
メソッド、sessionスコープまたはapplicationスコープを使用します。
たとえば、ダイアログを起動するJSFページは、次のようになります。
<af:commandButton text="Get Value"
action="dialog:getValue"
useWindow="true"
returnListener="#{backing.handleReturn}"
launchListener="#{backing.addParameter}".../>
バッキングBeanでは、次のようになります。
...
public void addParameter(LaunchEvent event)
{
// Pass the current value of the field into the dialog.
Object value = getInput().getValue();
event.getDialogParameters().put("inputValue", value);
}
processScope
オブジェクトを参照するページでは、次のようになります。
<af:outputText value="Input value is: #{processScope.inputValue}"/>
2つの入力フィールド(名前用とパスワード用の入力フィールド)、ログイン・コマンド・ボタンおよび新規ユーザー用コマンド・リンクがあるログイン・ページがあると仮定します。新規ユーザーが名前を入力して新規ユーザー用コマンド・リンクをクリックすると、ADF Facesは、新規アカウント用のダイアログ・ページ(たとえば、住所や電話番号などの詳細情報を入力できるページ)に移動します。新規アカウント用のダイアログ・ページにもユーザーの名前を表示します。その場合は、新規アカウント用のダイアログ・ページに(最初のログイン・ページで入力した)名前を渡す必要があります。
たとえば、ダイアログを起動するJSFページは、次のようになります。
<af:inputText label="First Name"
id="inputText1"
value="#{backing_login.username}"/>
...
<af:commandLink id="cmdLink"
text="New user?"
action="dialog:newAccount"
useWindow="true"
returnListener="#{backing.handleReturn}"
launchListener="#{backing_login.handleLaunch}".../>
バッキングBeanでは、次のようになります。
...
// Add parameters in the processScope that can be reached from the dialog
public void handleLaunch(LaunchEvent event)
{
// Pass the current value of the field into the dialog.
Object usr = username;
event.getDialogParameters().put("firstname", usr);
}
...
...
public String username;
public String getUsername()
{
return username;
}
public void setUsername(String username)
{
this.username = username;
}
...
新しいアカウント用ダイアログ・ページのprocessScope
オブジェクトは、次のようにして参照します。
<af:outputText value="Your first name is #{processScope.firstname}"/>
af:setActionListenerおよびprocessScopeについて
ADF Facesでのダイアログの起動
Copyright © 1997, 2007, Oracle. All rights reserved.