ダイアログは、特別なJSFナビゲーション・ルールと組み合せて、ADF Facesコマンド・コンポーネント(oracle.adf.view.faces.component.UIXCommand
)から起動できます。現行のページに「Show Me More」(詳細表示)コマンド・ボタンがあると仮定します。このボタンがクリックされると、ADF Facesは、showMore.jspx
ダイアログ・ページを新しいウィンドウで起動します。このダイアログ・ページには「Done」(終了)コマンド・ボタンがあります。このボタンがクリックされると、ADF Facesは、ダイアログを閉じて元のページに戻ります。
このトピックでは、次の各項について説明します。
コマンド・コンポーネントでは、ダイアログをプログラムによって表示するactionメソッドを単一で使用するか、アクションの静的な結果を使用して、ダイアログ・ページへの通常のナビゲーションを実行できます。ダイアログは別のダイアログからも起動できることに注意してください。
ダイアログを起動するコマンド・ボタンがあるページで、次の属性をコマンド・コンポーネントに設定します。
action
: action
属性は静的な結果値になる可能性がありますが、"dialog:
"で開始する必要があります。あるいは、actionメソッドを使用できます。
useWindow
: 新しいウィンドウを使用してダイアログを起動する場合は、useWindow
をtrue
に設定します。設定しない場合は、同じウィンドウに表示されます。
windowWidth
とwindowHeight
: ウィンドウの幅と高さを設定します。
returnListener
: コマンド・ボタンにreturnListener
属性を設定し、(ダイアログの終了時に)returnEvent
を処理するメソッドにバインドできます。
partialSubmit
: コマンド・ボタンのpartialSubmit
は、ダイアログの起動時にページがリフレッシュされないように、true
に設定することをお薦めします。
属性useWindow="true"
は、"dialog:
"で開始するアクション結果と組み合せて使用します。結果が"dialog:
"で開始しない場合は、useWindow="true"
の場合でもダイアログは起動されません。同様に、"dialog:
"で開始する結果が定義されている場合でも、useWindow="false"
の場合またはuseWindow
が設定されていない場合、ダイアログは起動されません。
useWindow="true"
で、アクション結果がdialog:
結果でない場合、新しいプロセスは開始されません。アクション結果がdialog:
結果で、useWindow="false"
または未設定の場合、新しいプロセスは開始されますが、新しいウィンドウは起動されません。
たとえば、ダイアログを起動する次のJSFページがあると仮定します。
<af:commandButton text="Show More Information"
partialSubmit="true"
action="dialog:showMore"
returnListener="#{backingBean.handleReturn}"
useWindow="true"
windowHeight="200"
windowWidth="300"/>
バッキングBeanでは、次のようになります。
...
public void handleReturn(ReturnEvent ReturnEvent)
{
Object returnedValue = event.getReturnValue();
// ... process the return value as desired ...
}
...
(静的な結果を使用せずに)プログラムによってダイアログを表示するには、actionメソッドを使用します。actionメソッドから戻る結果も"dialog:
"で開始する必要があります。次に例を示します。
<af:commandButton text="Show More Information"
useWindow="true"
action="#{backingBean.goSomewhere}"/>
バッキングBeanでは、次のようになります。
...
public String goSomewhere()
{
if (isUserLoggedOut())
{
return "dialog:loggedOutWarning";
}
else
{
return "dialog:showMore";
}
}
...
actionメソッドを使用するか、静的なアクション結果を使用するかに関係なく、クライアント・ブラウザがポップアップ・ウィンドウをサポートしている場合は、ダイアログが新しいウィンドウで起動します。それ以外の場合、ADF Facesは、現在のページの状態をすべて保存し、現行のウィンドウに単純にダイアログを表示します。ダイアログの終了時には、handleReturn()
がコールされます。
ダイアログへのナビゲーションは、特別なdialog:
結果を使用して標準的なJSFナビゲーション・ルールを定義することで管理します。このルールの定義は、ダイアログを起動するコマンド・ボタンに対して、actionメソッドを使用するか静的なアクション結果を使用するかに関係なく必要です。
faces-config.xml
の例を示します。
<navigation-rule>
<from-view-id>/*</from-view-id>
<navigation-case>
<from-outcome>dialog:showMore</from-outcome>
<to-view-id>/showMore.jspx</to-view-id>
</navigation-case>
</navigation-rule>
次に、ダイアログ・ページ(ダイアログ情報が記載されているJSFページ)を説明します。前述の例にあるダイアログ・ページshowMore.jspx
には、オリジナル・ページから選択した内容に関する詳細情報が表示されます。
このダイアログ・ページには、ダイアログが(発行ボタンや取消しボタンによって)終了したことを、ADF Facesに伝える方法を用意する必要があります。このようなボタンがクリックされた場合は、AdfFacesContext.returnFromDialog()
メソッドをコールする必要があります。このメソッドは、ダイアログ・ページが新しいウィンドウに表示されていたか、現行のウィンドウに表示されていたかに関係なくコールできます。新しいウィンドウが使用されていた場合、ダイアログ・ウィンドウは自動的に閉じます。このメソッドを使用すると、ReturnEvent
で(ダイアログからの)戻り値を渡すこともできます。これは、オリジナル・ページのコマンド・ボタンに登録されているreturnListener
に配布されます。
ダイアログ・ページに「Select」と「Cancel」という名前のコマンド・ボタンがあると仮定します。
<af:panelButtonBar>
<af:commandButton text="Cancel" immediate="true" action="#{dialogBacking.cancel}"/>
<af:commandButton text="Select" action="#{dialogBacking.select}"/>
</af:panelButtonBar>
バッキングBeanでは、次のようになります。
...
public String cancel()
{
AdfFacesContext.getCurrentInstance().returnFromDialog(null, null);
return null;
}
public String select()
{
...
// Get the return value
Object value = ...;
// Return the value
AdfFacesContext.getCurrentInstance().returnFromDialog(value, null);
...
return null;
}
注意: ダイアログ内から別のダイアログを起動する場合は、表示している最初のページでAdfFacesContext.returnFromDialog()
メソッドをコールする必要はありません。最初のページから必要に応じて様々なページに移動できますが、最終的にはAdfFacesContext.returnFromDialog()
をコール必要があります。
完全な例については、「Oracle ADF Facesアプリケーションの開発ガイドライン」のADF Facesダイアログ・フレームワークに関する説明を参照してください。
ヒント: af:returnActionListener
タグを使用すると、AdfFacesContext.returnFromDialog()
を使用してJavaコードを記述しなくても、ダイアログから値を戻すことができます。詳細は、「af:returnActionListener
およびダイアログ戻り値について」を参照してください。
selectInputTextおよびダイアログの起動について
ADF Facesでのダイアログに対する値の受渡しについて
ADF Facesコマンドおよび移動コンポーネントについて
Copyright © 1997, 2007, Oracle. All rights reserved.