ADF FacesのprocessScopeについて

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の詳細は、「Oracle ADF Facesアプリケーションの開発ガイドライン」のページ間での通信に関する説明を参照してください。


JSFでのスコープについて
ADF Facesでのダイアログに対する値の受渡しについて