ADF Facesには、ページ間での値の受渡しを容易にするprocessScope
と呼ばれる有効範囲が導入されているため、マスター/ディテール・ページを簡単に開発できます。processScope
は、JSF仕様に含まれていませんが、ADF Facesコンポーネントのみでなく、すべてのJSFコンポーネントに対してサポートされています。
processScope
に追加された値は、ユーザーがページ間を移動する際、自動的に継続使用できます。これは、<redirect/>
を使用する場合にも当てはまります。ただし、セッション・スコープとは異なり、これらの値を表示できるのは、現在のページ・フローまたはプロセス内のみです。ユーザーが新しいウィンドウを開いて移動を開始した場合、一連のウィンドウには独自のプロセスが設定され、各ウィンドウに格納されている値の独立性は維持されます。ブラウザの「戻る」ボタンがクリックすると、processScope
は元の状態に自動的にリセットされます。
JSFの有効範囲と同様に、ADF FacesのprocessScope
オブジェクトはJSF式言語(EL)で参照できます。次に例を示します。
<h:outputText value="#{processScope.someKey}"/>
Javaコードから、AdfFacesContext
APIを使用してjava.util.Map
としてprocessScope
にアクセスできます。
import oracle.adf.view.faces.context.AdfFacesContext;
public class MyBackingbean
{
public String myAction()
{
Object someValue = ...;
AdfFacesContext afContext = AdfFacesContext.getCurrentInstance();
afContext.getProcessScope().put("someKey", someValue);
return "myOutcome";
}
}
または
import oracle.adf.view.faces.context.AdfFacesContext;
public class MyBackingbean
{
public String myAction()
{
AdfFacesContext afContext = AdfFacesContext.getCurrentInstance();
afContext.getProcessScope().put("someKey", this);
return "myOutcome";
}
}
各行に従業員データを表示する表が挿入されているマスター・ページがあると仮定します。各行には、バッキングBeanのaction
プロパティがmyAction
メソッドに設定されているコマンド・ボタンがあります。
<h:dataTable var="employee" value="#{....}">
<h:column>
<h:outputText value="#{employee.name}"/>
</h:column>
...
<h:column>
<h:commandButton value="Show more details"
action="#{myBackingbean.myAction}"/>
</h:column>
</h:dataTable>
ユーザーがコマンド・ボタンを押すと、現在の(行の)従業員に関する詳細なデータを示す詳細ページが表示されます。この詳細ページでは、次のコード・スニペットに記載されているように、processScope.someKey
オブジェクトを参照します。
...
<h:outputText value="Name:"/>
<h:outputText value="#{processScope.someKey.name}"/>
<h:outputText value="Email:"/>
<h:outputText value="#{processScope.someKey.ename}"/>
...
processScope
に関する現在の制限は、次のとおりです。
processScope
オブジェクトを参照する場合は、processScope
をインクルードする必要があります。これは、EL式はprocessScope
を自動的に参照しないためです。前述の例のように、"#{someKey}
"ではなく、"#{processScope.someKey}
"を使用する必要があります。
processScope
は、<managed-bean-scope>
として使用できません。(ただし、<managed-property>
の<value>
はプロセス・スコープ値を参照できます。)
processScope
自体は、次のコード・スニペットで示すように、手動で強制的に消去する必要があります。AdfFacesContext afContext = AdfFacesContext.getCurrentInstance();
afContext.getProcessScope().clear();
要約すると、processScope
を使用する利点は、次のとおりです。
processScope
をADF Facesのaf:setActionListener
タグと併用し、バッキングBeanにJavaコードを記述せずに、ページ間で値を受渡しできます。「af:setActionListenerおよびprocessScopeについて」の例を参照してください。
processScope
の詳細は、「Oracle ADF Facesアプリケーションの開発ガイドライン」のページ間での通信に関する説明を参照してください。
JSFでのスコープについて
ADF Facesでのダイアログに対する値の受渡しについて
Copyright © 1997, 2007, Oracle. All rights reserved.