イベント処理を追加する

関連項目  

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

次のリンクをクリックして、目的の節にジャンプしてください。

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

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

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

コンポーネントを同期化する
  1. ビジュアル デザイナで、path コンポーネントを選択します。
  2. プロパティ ビューで、[同期化]タブをクリックします。
  3. 次のコンポーネントと同期化]をクリックして、次に[追加]をクリックします。
  4. 同期化するコンポーネントの選択]ダイアログ ボックスで reportsList コンポーネントを選択して、現在のコンポーネントと同期化します。
  5. OK]ボタンをクリックします。

    メモ    複数のコンポーネントが同じ EnterpriseItems Bean にバインドしている場合に そのうちの 1 つのコンポーネントを同期化しようとすると、複数のコンポーネントが同一の itemSource プロパティ値(EnterpriseItems Bean)を共有しており、選択したコンポーネントに同期を追加すると、この Bean にバインドされているすべてのコンポーネントに同期が追加されることを確認するメッセージが表示されます。[OK]をクリックして同期を確認します。

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

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

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

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

アクション メソッドを actionListener 属性に追加する
  1. プロジェクト エクスプローラ ビューで[動的 Web プロジェクト]ノードを開き、Web プロジェクトの下で[Java リソース]>[JavaSource]>[pagecode]の順に移動します。
  2. Contents.java をダブル クリックして編集するファイルを開きます。

    ヒント    または、contents.jsp を右クリックして、[ページ コードの編集]をクリックします。

  3. 次の import ステートメントを、ファイルの先頭の既存の import ステートメントの下に追加します。

    import com.businessobjects.jsf.sdk.event.ItemClickedEvent;

  4. 次のメンバ宣言を Contents クラスに追加します。

    String actionString = "";

  5. 次のメソッドを Contents クラスに追加します。

    public void doActionListener(ActionEvent event)

    {

    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 = "";

    }

    }

    }

  6. Contents.java を保存して閉じます。
  7. contents.jsp を開いて、ビジュアル デザイナで reportsList コンポーネントを選択します。
  8. プロパティ ビューで、 actionListener 属性を #{pc_Contents.doActionListener} に設定します。

    ここでは、Contents.java ページ コード クラス(Backing Bean)にあるメソッド doActionListener にバインドするメソッドを作成します。

doActionListener メソッドは、トリガされた現在のイベントが ItemClicked イベントであるかどうかを確認します。これは、ユーザーが reportsGrid コンポーネントの項目をクリックしたことを示すイベントです。

if (event instanceof ItemClickedEvent)

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 == 1)

{

actionString = "view_report";

}

else

{

actionString = "";

}

アクション メソッドを action 属性に追加する
  1. contents.jsp を右クリックし、[ページ コードの編集]をクリックします。

    メモ    この手順では、Contents.java を開いて編集します。

  2. 次のメソッドを Contents クラスに追加します。

    public String viewReport()

    {

    return actionString;

    }

  3. Contents.java を保存して閉じます。
  4. contents.jsp を開いて、ビジュアル デザイナで reportsList コンポーネントを選択します。
  5. プロパティ ビューで、action 属性を #{pc_ Contents.viewReport} に設定します。

    ここでは、Contents.java ページ コード クラス(Backing Bean)にある viewReport という名前のメソッドにバインドするメソッドを作成します。

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


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