33 ビュー・レイヤーで各機能を起動するコマンド・コンポーネントの使用

この章では、Fusion Webアプリケーションで、ADF Facesコマンド・コンポーネントとADFモデル・データ・バインディングを使用して、ADFビジネス・コンポーネントでカスタム・メソッドを起動する方法について説明します。具体的には、メソッドにパラメータを渡す方法、「データ・コントロール」パネルからメソッドをドラッグ・アンド・ドロップするときに作成される宣言メソッドをオーバーライドする方法など、ADF Facesコンポーネントを使用してADFビジネス・コンポーネント・クライアント・インタフェース・メソッドを起動する方法について説明します。

この章の内容は次のとおりです。

コマンド・コンポーネントについて

コマンド・コンポーネントは、アクティブ化されたときにアクションを実行するUICommandコンポーネントで表されます。ADF Facesコマンド・コンポーネントは、コンポーネントがアクティブ化されると、アクション・イベントを配信します。

基本的なページを作成してナビゲーション機能を追加すると、ページ間でパラメータを渡したり、宣言アクションをオーバーライドする機能を提供するなどの、より複雑な機能を追加できます。Oracle ADFには、このような複雑な機能を実際のコードをほとんど使用せずに追加できる機能が数多く用意されています。

この章で説明する実装メソッドのいくつかは、ページレベルの設計のためのものです。タスク・フローを使用することにより、同じ機能の多くを実行できます。「ADFタスク・フローのスタート・ガイド」を参照してください。

コマンド・コンポーネントのユースケースと例

コマンド・コンポーネントを使用すると、パラメータの引渡し、宣言アクションのオーバーライド、なんらかのロジックの実行といったアクションを実行できます。「データ・コントロール」パネルでコマンド・コンポーネントをカスタム・メソッドにバインドできます。たとえば、deleteOrderItem()というカスタム・メソッドがある場合、ボタンを作成してこのメソッドにバインドすると、ユーザーがこのボタンを押したときに注文項目を削除できます。

コマンド・コンポーネント内でsetPropertyListenerタグを使用して、イベント発生時に値を割り当てることもできます。たとえば、検索を開始して、マネージドBeanに保存されたパラメータ値に基づき、別のページ上に検索結果を表示するボタンを作成できます。setPropertyListenerプロパティを使用して、値をチェックするメソッドにこのパラメータ値を渡すことができます。

コマンド・コンポーネントにバインドされた宣言メソッドにコードを追加できます。たとえば、宣言的なCommitボタンを作成した後、マネージドBeanにコードを追加してから、追加処理用にCommit操作をオーバーライドできます。

コマンド・コンポーネントの追加機能

コマンド・コンポーネントの処理を開始する前に、その他のOracle ADF機能を理解しておくと役に立ちます。次に、関連する他の機能へのリンクを示します。

メソッドを実行するためのコマンド・コンポーネントの作成

「データ・コントロール」パネルには、ADFアプリケーションの制御フロー内のどこからでもアプリケーション・ロジックを起動するカスタム・メソッドが含まれています。メソッドを実行するコマンド・ボタンと同様に、メソッドをドラッグしてドロップできます。

アプリケーションにカスタム・メソッドが含まれている場合、これらのメソッドは「データ・コントロール」パネルに表示されます。これらのメソッドは、コマンド・ボタンとしてドラッグ・アンド・ドロップできます。ユーザーがボタンをクリックすると、メソッドが実行されます。

カスタム・メソッドの作成の詳細は、「サービス・メソッドによるアプリケーション・モジュールのカスタマイズ」および「UIクライアントへのカスタム・サービス・メソッドの公開」を参照してください。

ノート:

タスク・フローを使用している場合、タスク・フロー定義からメソッドを直接コールできます。詳細は、「メソッド・コール・アクティビティの使用」を参照してください。

たとえば、Oracle ADFのSummitサンプル・アプリケーションのItemsForOrderビュー・オブジェクトには、deleteOrderItem()メソッドが含まれています。このメソッドは、ショッピング・カート内の項目を更新します。ユーザーがこのメソッドを実行できるようにするには、図33-1のように、「データ・コントロール」パネルからdeleteOrderItem()メソッドをドラッグします。

図33-1 「データ・コントロール」パネルに表示されたメソッド

図33-1の説明が続きます
「図33-1 「データ・コントロール」パネルに表示されたメソッド」の説明

要求されるビジネス・ロジックを実行するために、多くのメソッドでは、そのパラメータ(1つ以上)に対する値を必要とします。つまり、メソッドにバインドされたボタンを作成する際に、EL式を作成して、パラメータの値の取得元を指定する必要があります。たとえば、populateInventoryForProduct(String productId)メソッドを使用する場合は、メソッド・アクション・バインディングを構成して製品IDを取得し、メソッドがそのIDを使用して製品のインベントリを表示できるようにする必要があります。

カスタム・メソッドにバインドされたコマンド・コンポーネントの作成方法

「データ・コントロール」パネルからフォームにカスタム・メソッドをドラッグすることにより、カスタム・メソッドにバインドされたコマンド・コンポーネントを作成します。

始める前に:

カスタム・メソッドについて理解しておくと役立ちます。詳細は、「メソッドを実行するためのコマンド・コンポーネントの作成」を参照してください。

また、他のコマンド・コンポーネントを使用して追加できる機能について理解しておくと役立ちます。詳細は、「コマンド・コンポーネントの追加機能」を参照してください。

次のタスクを完了する必要があります。

カスタム・メソッドにバインドされたコマンド・コンポーネントを作成するには:

  1. 「データ・コントロール」パネルから、メソッドをページにドラッグします。

    ヒント:

    表またはフォームに含まれるデータを使用するメソッドのボタンをドロップする場合は、その表またはフォームの中にボタンをドロップする必要があります。

  2. ポップアップ・メニューから「作成」>→「メソッド」>→「ADFボタン」を選択します。

    メソッドがパラメータを取る場合は、「アクション・バインディングの編集」ダイアログが開きます。「アクション・バインディングの編集」ダイアログで、各パラメータの値を入力するか、「パラメータ」「値」列で「EL式ビルダーの表示」メニュー選択をクリックし、EL式ビルダーを起動します。

メソッドを使用したコマンド・コンポーネント作成時の処理

メソッドをコマンド・ボタンとしてドロップすると、JDeveloperによって次の処理が行われます。

  • メソッドのメソッド・アクション・バインディングが定義されます。

  • メソッドがパラメータを取得する場合は、パラメータ値を保持するNamedData要素が作成されます。

  • ADF Facesコマンド・コンポーネント用のコードがJSFページに挿入されます。

  • actionListenerを使用して、ボタンにメソッドをバインドします。

  • メソッド・コールからの戻り値を使用します。

アクション・バインディング

JDeveloperはメソッドにアクション・バインディングを追加します。アクション・バインディングはRequiresUpdateModelプロパティを使用して、アクションを実行する前にモデルを更新する必要があるかどうかを判別します。コマンド操作の場合、デフォルトではこのプロパティはtrueに設定されています。つまり、ビュー・レイヤーでのすべての変更は、操作を実行する前にモデルに移動する必要があります。

メソッドのパラメータ

パラメータを取得するメソッドをJSFページにドロップすると、メソッド・アクション・バインディングが作成されます。このバインディングにより、ユーザーがコマンド・コンポーネントをクリックしたときにメソッドが実行されるようになります。メソッドが実行するパラメータを要求する場合は、JDeveloperによって、各パラメータのNamedData要素も作成されます。これらの要素は、メソッドのパラメータを表します。

たとえば、ADFタスク・フローのSummitサンプル・アプリケーションのpopulateInventoryForProduct(String)メソッド・アクション・バインディングには、StringパラメータのNamedData要素が含まれます。この要素は、アクション・バインディングの作成時に指定した値にバインドされます。次の例は、populateInventoryForProduct(String)メソッドをドロップし、Stringパラメータ(productId)を適切な変数にバインドしたときに作成されるメソッド・アクション・バインディングを示しています。

<methodAction id="populateInventoryForProduct" RequiresUpdateModel="true"
              Action="invokeMethod"
              MethodName="populateInventoryForProduct" IsViewObjectMethod="true"
              DataControl="BackOfficeAppModuleDataControl"
              InstanceName="data.BackOfficeAppModuleDataControl.InventoryVO1">
    <NamedData NDName="productId" NDType="java.lang.String"/>
</methodAction>
ADF Facesコンポーネント・コード

JDeveloperはADF Facesコンポーネント用のコードをJSFページに追加します。このコードは、「EL式を使用したメソッドへのバインド」で説明しているように、その他のコマンド・ボタンのコードに似ています。ただし、ボタンは、組込み操作用のアクション・バインディングのexecuteメソッドではなく、ドロップしたメソッド用のメソッド・アクション・バインディングのexecuteメソッドにバインドされます。

EL式を使用したメソッドへのバインド

操作を使用してコマンド・ボタンを作成するときと同様に、メソッドを使用してコマンド・ボタンを作成すると、actionListener属性を使用して、ボタンがメソッドに自動的にバインドされます。ボタンは、EL式を使用して、指定されたメソッドのアクション・バインディングのexecuteプロパティにバインドされます。このEL式により、アプリケーション・モジュールに対してバインディングのメソッドが起動します。コマンド・ボタンのactionListener属性の詳細は、「実行時に行われる処理: アクション・イベントおよびアクション・リスナーの動作方法」を参照してください。

ヒント:

アクション・バインディングのexecuteメソッドにボタンをバインドするかわりに、executeメソッドをオーバーライドするバッキングBean内のメソッドにボタンをバインドできます。そうすることで、元のメソッドの実行前か実行後に、ロジックを追加できるようになります。詳細は、「宣言メソッドの上書き」を参照してください。

ナビゲーション操作のように、ボタンのdisabledプロパティは、EL式を使用してボタンを表示するかどうかを決定します。次の例は、コマンド・ボタンのpopulateInventoryForProduct(String)メソッドへのバインドに使用されるEL式を示しています。

<af:button actionListener="#{bindings.populateInventoryForProduct.execute}"
                       text="populateInventoryForProduct"     
                       disabled="#{!bindings.populateInventoryForProduct.enabled}"
                       id="b1"/>

ヒント:

コマンド・ボタン・コンポーネントをページにドロップすると、以前にドロップされた同種のコンポーネントの数に基づいて自動的にIDが付けられます。たとえば、最初の2つのボタンのb1およびb2がドロップされます。このIDをより説明的なものに変更する場合は、ページ内のすべてのEL式でこのIDへの参照を手動で更新する必要があります。

メソッド・コールからの戻り値の使用

メソッド・コールからの戻り値を使用することもできます。次の例は、文字列値を戻すカスタム・メソッドを示しています。

/**
 * Custom method.
*/
    public String getHelloString() {
        return ("Hello World");
    }

次の例は、コマンド・ボタンおよびoutputTextコンポーネントのJSFページのコードを示しています。

<af:button actionListener="#{bindings.getHelloString.execute}"
        text="getHelloString"
        disabled="#{!bindings.getHelloString.enabled}"
        id="helloButtonId"/>
<af:outputText value="#{bindings.return.inputValue}"
        id="helloOutputId"/>

ユーザーがコマンド・ボタンをクリックすると、カスタム・メソッドがコールされます。このメソッドは、outputTextコンポーネントの値として表示される文字列「Hello World」を戻します。

実行時に行われる処理: コマンド・ボタンのメソッド・バインディング

ユーザーがボタンをクリックすると、メソッド・バインディングによって、関連付けられているメソッドが起動し、NamedData要素にバインドされている値がパラメータとして渡されます。たとえば、ユーザーがopulateInventoryForProduct(String productId)メソッドにバインドされるボタンをクリックすると、メソッドはproductIdパラメータの値を取得し、その製品の在庫を表示します。

コマンド・コンポーネントを使用したパラメータ値の設定

複雑なADFアプリケーション機能を決定するには、ページのアクションにパラメータを設定することが必要な場合があります。マネージドBeanを使用してパラメータを正常に渡すことができ、Beanのメソッドによってパラメータがチェックされます。

1つのページでのアクションに対して、アプリケーション機能を判別するためのパラメータを設定する必要が生じる場合があります。たとえば、あるページから別のページの結果表へ移動する検索ボタンを作成できます。ただし、結果表が表示されるのはパラメータ値がfalseの場合のみです。

ページ間でこのパラメータを渡す場合やパラメータ値のチェックに使用するメソッドを含める場合には、マネージドBeanを使用できます。検索ページのレンダリング時にマネージドBeanがインスタンス化され、このBeanのメソッドによってこのパラメータがチェックされます。このパラメータがnullの場合(ページが初めてレンダリングされる場合)は、値がtrueに設定されます。

カスタム・メソッドの作成の詳細は、「サービス・メソッドによるアプリケーション・モジュールのカスタマイズ」および「UIクライアントへのカスタム・サービス・メソッドの公開」を参照してください。

ノート:

タスク・フローを使用している場合、タスク・フローのパラメータ渡しメカニズムを使用できます。「タスク・フローのパラメータの使用」を参照してください。

typeプロパティがactionに設定されたsetPropertyListenerコンポーネント(この検索を実行したコマンド・ボタンにネストされている)を使用してこのフラグがfalseに設定されるため、検索の実行後に結果表が表示されるようになります。マネージドBeanの使用の詳細は、「Fusion WebアプリケーションでのマネージドBeanの使用」を参照してください。

コマンド・コンポーネント内でのsetPropertyListenerを使用したパラメータの設定方法

setPropertyListenerコンポーネントを使用して、その他のオブジェクトの値を設定できます。このコンポーネントは、コマンド・コンポーネントの子である必要があります。

始める前に:

setPropertyListenerおよびマネージドBeanを使用して値を設定する方法について理解しておくと役立ちます。詳細は、「コマンド・コンポーネントを使用したパラメータ値の設定」を参照してください。

また、他のコマンド・コンポーネントを使用して追加できる機能について理解しておくと役立ちます。詳細は、「コマンド・コンポーネントの追加機能」を参照してください。

次のタスクを完了する必要があります。

setPropertyListenerコンポーネントを使用するには:

  1. 「アプリケーション」ウィンドウで、リスナーを追加するコマンド・コンポーネントを含むWebページをダブルクリックします。
  2. ページの設計エディタで、コマンド・コンポーネントを右クリックして、「内部に挿入」ボタン→「ADF Faces」を選択します。
  3. ADF Facesアイテムの挿入ダイアログで「プロパティ・リスナーの設定」を選択し、「OK」をクリックします。
  4. 「プロパティ・リスナーの設定の挿入」ダイアログの「選択元」フィールドにパラメータ値を入力します。

    フィールドの右にカーソルを移動し、表示されるアイコンをクリックして、「式ビルダー」を選択すると、このフィールドの式ビルダーを表示できます。

  5. 「先」フィールドにパラメータのターゲットを入力します。

    フィールドの右にカーソルを移動し、表示されるアイコンをクリックして、「式ビルダー」を選択すると、このフィールドの式ビルダーを表示できます。

    ヒント:

    作成されるページのページ定義ファイルに直接パラメータ値を設定するかわりに、マネージドBeanまたはスコープにパラメータ値を格納することを考慮してください。次のページに直接設定すると、それ以降、ナビゲーションを簡単に変更できなくなります。詳細は、「Fusion WebアプリケーションでのマネージドBeanの使用」を参照してください。また、バインディング・コンテナ内のデータは、そのコンテナが準備されたリクエストでのみ有効です。データを設定してから次のページがレンダリングされるまでの間に、データが変更される場合があります。

  6. 「タイプ」ドロップダウン・メニューから「アクション」を選択します。
  7. 「OK」をクリックします。

setPropertyListenerを使用したパラメータ設定時の処理

setPropertyListenerコンポーネントを使用すると、次のページに移動する前にコマンド・コンポーネントによって値が設定されます。渡す必要がある値のソースまたは実際の値をfrom属性に設定すると、コンポーネントからその値へのアクセスが可能になります。to属性をターゲットに設定すると、コマンド・コンポーネントによってターゲットに値が設定されるようになります。次の例は、false値を取得し、その値をsearchResultsマネージドBeanのinitialSearchフラグの値として設定するコマンド・コンポーネントのJSFページのコードを示しています。

<af:button actionListener="#{bindings.Execute.execute}"
                 text=Search>
      <af:setPropertyListener from="#{false}"
                          to="#{searchResults.initialSearch}"/>
                          type="action"/>
</af:button>

実行時に行われる処理: コマンド・コンポーネントに対するsetPropertyListener

ユーザーがコマンド・コンポーネントをクリックすると、移動する前に、setPropertyListenerコンポーネントによってパラメータ値が設定されます。「setPropertyListenerを使用したパラメータ設定時の処理」の例に示すように、setPropertyListenerfalse値を取得し、その値をsearchResultsマネージドBeanのinitialSearch属性の値として設定しています。これで、レンダリングするかどうかを決定するためにこの値を認識する必要があるコンポーネントは、EL式#{searchResults.initialSearch}を使用してアクセスできます。

宣言メソッドのオーバーライド

既存の宣言メソッドの機能をオーバーライドして、メソッド要件に固有の動作を定義できます。宣言メソッドの前後にロジックを追加するには、関連付けられたアクション・バインディングへのアクセスを提供するマネージドBeanに新しいメソッドとプロパティが必要です。

操作またはメソッドをコマンド・ボタンとしてドロップすると、操作またはメソッドのexecuteメソッドに、そのボタンが自動的にバインドされます。ただし、既存のロジックの前または後に、ロジックの追加が必要になる場合もあります。

ノート:

タスク・フローを使用している場合、タスク・フローからカスタム・メソッドをコールできます。詳細は、「ADFタスク・フローのスタート・ガイド」を参照してください。

JDeveloperを使用すると、バインディング・コンテナにアクセスするマネージドBeanでメソッドおよびプロパティを新規作成することにより、宣言的操作にロジックを追加できます。デフォルトでは、この生成されたコードによって、操作またはメソッドが実行されます。その後、このコードの前か後にロジックを追加できます。元の操作またはメソッドのexecuteプロパティではなく、この新規メソッドにコマンド・コンポーネントが自動的にバインドされます。その後、ユーザーがボタンをクリックすると、新規メソッドが実行されます。

たとえば、Summit ADFタスク・フロー・サンプル・アプリケーションのCustomers.jsffフラグメントでは、「新規」アイコンをクリックして、新規注文を作成できます。ただし、宣言的CreateInsert操作には、追加処理が必要です。ボタンをクリックすると、注文の詳細を示す新規タブが表示される必要があります。この処理を提供するために、CustomersBackingBeanのマネージドBeanのcreateNewOrderメソッドにロジックが追加されます。

宣言メソッドをオーバーライドするには、マネージドBeanにコマンド・コンポーネントがバインドされる新規メソッドを保持させる必要があります。ページにバッキングBeanが関連付けられている場合は、JDeveloperによって、バインディング・オブジェクトへのアクセスに必要なコードがバッキングBeanに追加されます。ページにバッキングBeanが関連付けられていない場合は、作成を促す指示が表示されます。

宣言メソッドのオーバーライド方法

コマンド・コンポーネントを追加して、マネージドBeanを使用してその宣言メソッドをオーバーライドできます。

始める前に:

宣言メソッドのオーバーライド方法について理解しておくと役立ちます。詳細は、「宣言メソッドの上書き」を参照してください。

また、他のコマンド・コンポーネントを使用して追加できる機能について理解しておくと役立ちます。詳細は、「コマンド・コンポーネントの追加機能」を参照してください。

次のタスクを完了する必要があります。

ノート:

現在、コマンド・コンポーネントのAction属性の値としてEL式が設定されている場合は、JDeveloperによってEL式が上書きされないため、宣言メソッドをオーバーライドできません。次の手順を行う前に、この値を削除する必要があります。

宣言メソッドをオーバーライドするには:

  1. オーバーライドする操作またはメソッドをJSFページ上にドラッグし、UIコマンド・コンポーネントとしてドロップします。

    コンポーネントが作成され、ActionListener属性を使用してADFモデル・レイヤーの関連するバインディング・オブジェクトにバインドされます。

    「データ・コントロール」パネルでメソッドを使用したコマンド・コンポーネントの作成の詳細は、「メソッドを実行するためのコマンド・コンポーネントの作成」を参照してください。

    操作によるコマンド・コンポーネントの作成の詳細は、「操作を使用したコマンド・コンポーネント作成時の処理」を参照してください。

  2. JSFページでコンポーネントをダブルクリックします。
  3. 「バインド・アクション・プロパティ」ダイアログで、次のいずれかの方法で、バッキングBeanとコンポーネントのバインド先とするメソッドを指定します。
    • ページで自動バインディングが有効になっている場合(「JSFページの作成」ウィザードの「マネージドBean」タブにある「新規マネージドBeanでのUIコンポーネントの自動公開」を選択)、バッキングBeanがすでに選択されています。

      • 新規メソッドを作成するには、「メソッド」フィールドにメソッドの名前を入力します。このフィールドには、最初にデフォルト名が表示されています。

        または

      • 既存のメソッドを使用するには、「メソッド」フィールドのドロップダウン・リストからメソッドを選択します。

      • 「生成にADFバインディングを使用」を選択します。

    • そのページで自動バインディングが使用されていない場合は、既存のバッキングBeanから選択するか、新規作成できます。

      • 「新規」をクリックして、新しいバッキングBeanを作成します。「マネージドBeanの作成」ダイアログで、Beanおよびクラスに名前を付け、Beanのスコープを設定します。

        または

      • 既存のバッキングBeanおよびメソッドをドロップダウン・リストから選択します。

      図33-2に、メソッド・バインディングに対して指定されるマネージドBeanのメソッドを使用した「バインドActionプロパティ」ダイアログを示します。

      図33-2 「バインドActionプロパティ」ダイアログ

      図33-2の説明が続きます
      「図33-2 バインドActionプロパティ・ダイアログ」の説明

    ノート:

    コマンド・コンポーネントにActionListener属性の値が存在する場合は常に、ボタンのバインド先はバインディングのexecuteプロパティであるとみなされます。そのバインディングを削除した場合は、ADFバインディング・コードを生成することを選択できなくなります。その場合は、コマンド・コンポーネントをダブルクリックする前に、コードを手動で挿入するか、ActionListenerのダミー値を設定する必要があります。

  4. バッキングBeanおよびメソッドを識別したら、「バインドActionプロパティ」ダイアログで「OK」をクリックします。

    ソース・エディタでマネージドBeanが開きます。次の例は、Summit ADFタスク・フロー・サンプル・アプリケーションのBeanに挿入されるコードを示しています。この例では、コマンド・ボタンがCreateInsert操作にバインドされています。

    public void createNewOrder() {
            BindingContainer bindings = getBindings();
            OperationBinding operationBinding =
                  bindings.getOperationBinding("CreateInsert");
            Object result = operationBinding.execute();
            if (!operationBinding.getErrors().isEmpty()) {
                return null;
            }
    }
    
  5. これで、次の例に太字のコードで示すように、バインディング・オブジェクトにアクセスする前または後に、ロジックを追加できます。
    public void createNewOrder() {
    //This method is called when creating a new order 
    //to create the record and switch the tab
      getSdi3().setDisclosed(false);
      getSdi4().setDisclosed(true);
      BindingContainer bindings = getBindings();
      OperationBinding operationBinding =
           bindings.getOperationBinding("CreateInsert");
      operationBinding.execute();
      AdfFacesContext adfFacesContext = AdfFacesContext.getCurrentInstance();
      adfFacesContext.addPartialTarget(getSdi4()); 
    }
    

    処理ロジックに加えて条件付きロジックを記述し、複数の結果の中から1つを戻すこともできます。たとえば、処理中にエラーが発生した場合にはnullを、処理が正常終了した場合は別の結果値を戻すことができます。nullの戻り値により、ナビゲーション・ハンドラはナビゲーション・ケースを評価せずに、そのまま現在ページを再表示します。

    ヒント:

    特定のナビゲーション・ケースをトリガーするには、メソッドによって戻される結果値が、ナビゲーション・ルールの結果値と(大/小文字も含めて)完全に一致する必要があります。

    この時点で、コマンド・ボタンは、ActionListener属性ではなく、Action属性を使用して新しいメソッドにバインドされています。Action属性の値(結果文字列など)がすでに存在していた場合は、その値が新規メソッドの戻りとして追加されます。値が存在していなかった場合は、戻りがnullのままになります。

宣言メソッドのオーバーライド時の処理

宣言メソッドをオーバーライドすると、JDeveloperにより、管理プロパティがバッキングBeanに追加され、この管理プロパティに値#{bindings}(バインディング・コンテナへの参照)が設定されます。また、強く型付けされたBeanプロパティがBindingContainer型のクラスに追加され、JSFランタイムにより、値として管理プロパティ式#{bindings}が設定されます。また、JDeveloperはUIコマンド・アクション・メソッドにロジックを追加します。このロジックには、現在のバインディング・コンテナへのアクセスに使用されている、強く型付けされたgetBindings()メソッドが含まれます。

このコードは、次の操作を実行します。

  • バインディング・コンテナにアクセスします。

  • 関連付けられているメソッドのバインディングを検索し、実行します。

  • ナビゲーションに使用できるメソッドの戻り値を追加します。デフォルトでは、戻り値はnullです。ボタンのAction属性に結果文字列がすでに存在する場合は、その属性が戻り値として使用されます。このコードは、必要に応じて変更できます。

ActionListener属性ではなく、Action属性を使用して新しいメソッドにUIコマンド・コンポーネントがリバインドされます。次の例は、CreateInsert操作が宣言的にページに追加される場合のコードを示しています。

<af:button actionListener="#{bindings.CreateInsert.execute}"
                  text="CreateInsert" 
                  disabled="#{!bindings.CreateInsert.enabled}"/>

次の例は、ページのバッキングBeanのメソッドをオーバーライドした後のボタン・タブのコードを示しています。ここでは、action属性は、バッキングBeanのメソッドにバインドされています。

<af:button text="New"
           action="#{backingBeanScope.CustomersBackingBean.createNewOrder}"/>

ヒント:

オーバーライド後のメソッドを使用するボタンをクリックすると、次のエラーが表示されます。

SEVERE: マネージドBean main_beanを作成できませんでした。参照されるオブジェクトのスコープ: '#{bindings}'が、参照するオブジェクトより小さいです。

これは、オーバーライド後のメソッドを含むマネージドBeanのスコープが、requestより大きい(つまり、sessionまたはapplicationである)ためです。メソッドで参照されるバインディング・コンテナ内のデータのスコープがrequestであるため、このマネージドBeanのスコープは同じか、より小さいスコープに設定する必要があります。