イベント処理の追加

関連項目  

これで、contents.jsp ページでユーザーにフォルダとレポートの一覧を表示し、ユーザーがこれらのフォルダ間を移動できるようになりました。このページを完成するには、ユーザーがこのページのさまざまな部分をクリックしたときのアクションを決定するいくつかの機能を実装する必要があります。

次のリンクをクリックして、目的の節に移動してください。

コンテンツ ナビゲーションの同期化

pathfoldersList のコンポーネントが 1 つの EnterpriseItems Bean(フォルダを表示)にバインドされていることから、ユーザーがこの片方のコンポーネントをクリックすると、もう一方のコンポーネントが自動的に更新されます。したがって、folderList コンポーネント内のフォルダをクリックすると、path コンポーネントにあるナビゲーション パスが更新されます。

ただし、このページの reportsList コンポーネントは、別の EnterpriseItem Bean(レポートを表示)にバインドされています。ユーザーが path または foldersList コンポーネント内のフォルダをクリックすると、そのフォルダに含まれるレポートが reportsList コンポーネントに表示される必要があります。レポートを表示するには、コンポーネント間で EnterpriseItems データを同期化する必要があります。

コンポーネントを同期化する
  1. ビジュアル デザイナで、path コンポーネントを選択します。
  2. プロパティ ビューで、[同期化]タブをクリックします。
  3. 次のコンポーネントと同期化]をクリックして、次に[追加]をクリックします。
  4. 同期化するコンポーネントの選択]ダイアログ ボックスで reportsList コンポーネントを選択して、現在のコンポーネントと同期化します。
  5. OK]ボタンをクリックします。
  6. 注    複数のコンポーネントが同じ EnterpriseItems Bean にバインドしている場合に そのうちの 1 つのコンポーネントを同期化しようとすると、複数のコンポーネントが同一の itemSource プロパティ値(EnterpriseItems Bean)を共有しており、選択したコンポーネントに同期を追加すると、この Bean にバインドされているすべてのコンポーネントに同期が追加されることを確認するメッセージが表示されます。[OK]をクリックして同期を確認します。

  7. ビジュアル デザイナで foldersList コンポーネントを選択して、2 から 5 のステップを繰返し、reportsList コンポーネントと同期化します。

これで、path または foldersList のコンポーネントをクリックすると、reportsList コンポーネントが更新されるようになります。詳細については、別々の EnterpriseItems Bean にバインドしている複数の ItemsGrid と Path のコンポーネントの同期方法を参照してください。

グリッドからのレポートの表示

ユーザーが reportsList コンポーネントにあるレポートをクリックしたときには、レポートを表示する view.jsp ページにユーザーをリダイレクトする必要があります。このアクションは、ItemClicked イベントのトリガによって開始されます。この機能を有効にするには、いくつかの操作が必要です。

reportsList コンポーネントのデフォルトのイベント処理をオフにする
アクション メソッドを actionListener 属性に追加する
  1. ファイル contents.jsp を開き、右クリックして[ページ コードの編集]を選択すると、
    Contents.java ファイルが開きます。
  2. 次のメンバ宣言を Contents.java ファイルの Contents クラスに追加します。
  3. String actionString = "";

  4. 次の import ステートメントをファイルの先頭に追加します。
  5. import com.businessobjects.jsf.sdk.event.ItemClickedEvent;

  6. Contents.java を保存して閉じます。
  7. reportsList コンポーネントのプロパティ ビューで、[クイック編集]タブをクリックします。
  8. アクション]アイコンをクリックして、[クイック編集]テキスト ボックスに次のメソッドを入力します。
  9.     if (event instanceof ItemClickedEvent)

        {

            ItemClickedEvent currentEvent = (ItemClickedEvent) event;

            String reportID = currentEvent.getEventArgs().getItemID();

            getEnterpriseItem().setItemID(reportID);

            int columnIndex = currentEvent.getEventArgs().getColumnIndex();

            if (columnIndex == 0)

            {

                actionString = "view_report";

            }

            else

            {

                actionString = "";

            }

        }

  10. contents.jsp を保存します。

このアクション メソッドは、トリガされた現在のイベントが ItemClicked イベントであるかどうかを確認します。これは、ユーザーが reportsGrid コンポーネントの項目をクリックしたことを示すイベントです。ItemClicked イベントがアプリケーションによってトリガされた場合は、クリックされたレポートのレポート ID がイベント データから取得されます。

ItemClickedEvent currentEvent = (ItemClickedEvent) event;

String reportID = currentEvent.getEventArgs().getItemID();

このレポート ID は EnterpriseItem Bean の ItemID プロパティに設定され、次に開かれるページである view.jsp の ReportPageViewer コンポーネントのレポート ソースとして使用されます。

getEnterpriseItem().setItemID(reportID);

最後に、このメソッドは reportsGrid コンポーネントのどの列がクリックされたかを確認します。このチュートリアルでは、レポートのタイトル(最初の列)だけがアプリケーションにレポートの表示をトリガします。レポートの説明など、これ以外の列がクリックされた場合には、アクションは開始されません。

int columnIndex = currentEvent.getEventArgs().getColumnIndex();

if (columnIndex == 0)

{

    actionString = "view_report";

}

else

{

    actionString = "";

}

アクション メソッドを action 属性に追加する
  1. reportsList コンポーネントのプロパティ ビューで、[クイック編集]タブをクリックします。
  2. コマンド]アイコンをクリックして、[クイック編集]テキスト ボックスに次のメソッドを入力します。
  3.     return actionString;

  4. contents.jsp を保存します。

このメソッドは、アクション メソッドで設定されたアクション文字列を返します。ユーザーが reportsList コンポーネントの最初の列にあるレポート タイトルをクリックすると、この文字列が“view_report”に設定されます。






Business Objects
http://japan.businessobjects.com/
サポート サービス
http://japan.businessobjects.com/services/