Oracle ADFを使用したStrutsアプリケーションの名前付きイベントの使用

Oracle ADFでは、Webアプリケーションでイベントを使用するためのコマンドおよびイベント・ハンドラを簡単な方法で作成できます。このトピックでは、次の項目について説明します。

Webページからの名前付きイベントのコール

名前付きイベントをコールするためにWebページに追加するコードは、モデル・レイヤー・アクションの場合と、モデル・レイヤーに移動しない名前付きイベントの場合で同じです。

アクション・バインディング・モデルの操作を実行するには、次のようにします。

  1. ページ・フロー・ダイアグラムでデータ・ページまたはページ・アイコンをダブルクリックして、編集するWebページを開きます

  2. データ・コントロール・パレットから操作をドラッグして、関連するWebページの設計ビューに挿入します。

Webページからカスタム・イベントをコールするには、次のようにします。

  1. ページ・フロー・ダイアグラムでデータ・ページ、ページ・フォワードまたはページ・アイコンをダブルクリックして、編集するWebページを開きます

  2. ビジュアル・エディタで、「ソース」タブを選択して、Webページのコード・ビューに切り替えます。

  3. イベントをコールするコードを入力します。

    ボタンの場合は、次のように入力します。

    <input type="submit" name="event_eventName" value="buttonName"/>        

    eventNameはイベントの名前、buttonNameはボタンのテキストです。

    リンクの場合は、次のように入力します。

    <a href="pageName.do?event=EventName">Link Text</a>        

    eventNameはイベントの名前、Link Textはリンクのテキストです。

Webページにイベントをコールするコマンドを記述した後は、既存の操作のカスタマイズや新規の名前付きイベントの作成もできます。

イベントのカスタマイズおよび作成

アプリケーション用のビジネス・サービスを作成して登録すると、データ・コントロール・パレットに使用可能な操作(アクション・バインディング)が表示されます。これらの操作の動作をオーバーライドするには、その操作を使用するWebページに関連付けられているデータ・アクションまたはデータ・ページに対するページ・コントローラ・クラスを拡張するクラスにイベント・ハンドラを作成します。また、アクション・バインディングを使用しないイベントも新規に作成できます。

アクション・バインディング内の既存の操作をオーバーライドするには、次のようにします。

  1. プロジェクトのStrutsページ・フロー・ダイアグラムを表示します。

  2. ページ・フロー・ダイアグラムで、メソッドをコールするページに関連付けられているデータ・アクションまたはデータ・ページを右クリックし、コードに移動を選択します。

  3. このアクションに対するページ・コントローラを拡張するクラスをすでに作成している場合は、そのクラスをJavaソース・エディタで開きます。(以前のリリースのJDeveloperから移行したアプリケーションを使用していて、カスタマイズ・コードをまだ変換していない場合は、最初に変換を実行する必要があります。「10.1.2からADFページ・ライフサイクルへの変換」を参照。)

    作成済でない場合は、「ADF PageController」ダイアログを使用して、PageControllerを拡張する新規クラスの「名前」および「パッケージ」を指定します。「拡張対象」フィールドはデフォルトのoracle.adf.controller.v2.lifecycle.PageControllerのままにします。新規クラスはJavaソース・エディタに表示されます。

  4. Javaソース・エディタが表示された状態で、テンプレート・イベント・ハンドラを追加するには、「ソース」メニューから「テンプレートの適用」を選択し、表示されたリストからdaev Data Action Event Handlerを選択します。

    この結果、イベント・ハンドラのコード・セグメントが追加されます。

  5. メソッド・シグネチャのonの後にカーソルが置かれ、イベントの名前を入力できる状態になります。たとえば、Next操作をオーバーライドする場合、シグネチャは次のようになります。

    public void onNext(PageLifecycleContext ctx)

新規イベント用の名前付きイベント・ハンドラを作成するには、次のようにします。

  1. ページ・フロー・ダイアグラムで、名前付きイベント・ハンドラを追加するデータ・アクションまたはデータ・ページを右クリックし、コードに移動を選択します。

  2. このアクションに対するページ・コントローラを拡張するクラスをすでに作成している場合は、そのクラスをJavaソース・エディタで開きます。

    作成済でない場合は、「ADF PageController」ダイアログを使用して、PageControllerを拡張する新規クラスの「名前」および「パッケージ」を指定します。「拡張対象」フィールドはデフォルトのoracle.adf.controller.v2.lifecycle.PageControllerのままにします。新規クラスはJavaソース・エディタに表示されます。

  3. Javaソース・エディタで、イベント・ハンドラのコードを追加します。イベント・ハンドラのシグネチャは次のようになります。

    public void onMyEvent(PageLifecycleContext ctx) 
    { 
      //Your implementation here 
    }        

名前付きイベント・ハンドラの条件付き実行

アプリケーションの機能によっては、名前付きイベント・ハンドラを実行するかどうかを決定する必要がある場合があります。たとえば、他のイベントがトリガーされていない場合にのみ処理するイベントがあるとします。

この処理を実現するには、イベント・ハンドラのコードで、チェックする必要がある条件をテストし、該当する状況の場合にのみイベントに対するアクションを実行します。条件が別のイベントがトリガーされているかどうかに依存する場合は、ページ・ライフサイクル・コンテキストでgetEvents()メソッドを使用してイベントのリストをチェックできます。次に例を示します。

public void onMyEvent(PageLifecycleContext ctx)
{
  List events = ctx.getEvents();
  // Check for a particular event
  if (events.contains("myOtherEvent"))
  {
     return;
  }

  // Perform your processing here
}    

イベントを使用したアクション・フォワードの定義

名前付きのイベントを使用してWebページ内のデータ・アクションまたはデータ・フォワード・アクションに対するフォワードを定義するには、アクションのフォワードのname属性の値を、Webページ内の関連するイベントの名前と同じにします。データ・アクションおよびデータ・ページで、アクション・サブクラス内またはアクション・バインディング内のいずれでも定義されていないイベントが発生した場合、そのイベントはフォワードの名前であると想定されます。

イベントをアクション・フォワードに関連付けるには、次のようにします。

  1. イベントをトリガーするWebページで、イベントに対するコマンドを入力します。

    たとえば、WebページeditPage.htmlに、commitイベントをコールするボタンとhelpイベントをコールするリンクが含まれているとします。

    commitイベントは、データ・コレクションの一般的な操作で、データ・コントロール・パレットからドロップ可能です。この例では、「Commit」ボタンをクリックすると編集操作がコミットされ、参照ページに戻ります。

    次のコードは、コミット・イベントをコールする(Strutsフォーム内部の)ボタンのHTMLを示しています。

    <form method="POST" action="editPage.do">
      <input type="submit" name="event_Commit" value="Commit"/>
    </form>        

    helpイベントでは、現在のページに対する適切なヘルプ・ページが表示されるカスタム・ナビゲーション・オプションが提供されます。次のコードは、ヘルプ・イベントをコールするリンクのHTMLを示しています。

    <a href="editPage.do?event=Help">Help</a>        
  2. Webページ内のイベント名と同じになるように、アクション・フォワードのname属性を正しいパスとともに設定します。

    前述の例では、参照ページに移動するフォワードは次のように定義されます。

    <forward name="commit" path="/browsePage.do">

    ヘルプ・ページに移動するフォワードは次のように定義されます。

    <forward name="help" path="/help.jsp">

    次の図は、ページ・フロー・ダイアグラムでこの例のページ・フローがどのように表示されるかを示しています。

    コミット・フォワードおよびヘルプ・フォワードが含まれるページ・フロー・ダイアグラム

Oracle ADFでは、関連するデータ・アクションまたはデータ・フォワード・アクションのサブクラスの作成が不要になるようにこの設定が処理されます。


サポートされているデータ・コレクション操作について
Oracle ADFでの名前付きイベントについて

データ・コントロール・パレットを使用したビジネス・サービス・アクションの挿入
ビジネス・サービス・メソッドの実行
コード・テンプレートの使用