これで、contents.jsp ページでユーザーにフォルダとレポートの一覧を表示し、ユーザーがこれらのフォルダ間を移動できるようになりました。このページを完成するには、ユーザーがこのページのさまざまな部分をクリックしたときのアクションを決定するいくつかの機能を実装する必要があります。
path と foldersList のコンポーネントが 1 つの EnterpriseItems Bean(フォルダを表示)にバインドされていることから、ユーザーがこの片方のコンポーネントをクリックすると、もう一方のコンポーネントが自動的に更新されます。したがって、folderList コンポーネント内のフォルダをクリックすると、path コンポーネントにあるナビゲーション パスが更新されます。
ただし、このページの reportsList コンポーネントは、別の EnterpriseItem Bean(レポートを表示)にバインドされています。ユーザーが path または foldersList コンポーネント内のフォルダをクリックすると、そのフォルダに含まれるレポートが reportsList コンポーネントに表示される必要があります。レポートを表示するには、コンポーネント間で EnterpriseItems データを同期化する必要があります。
path コンポーネントを選択します。reportsList コンポーネントを選択して、現在のコンポーネントと同期化します。注 複数のコンポーネントが同じ EnterpriseItems Bean にバインドしている場合に そのうちの 1 つのコンポーネントを同期化しようとすると、複数のコンポーネントが同一の itemSource プロパティ値(EnterpriseItems Bean)を共有しており、選択したコンポーネントに同期を追加すると、この Bean にバインドされているすべてのコンポーネントに同期が追加されることを確認するメッセージが表示されます。[OK]をクリックして同期を確認します。
foldersList コンポーネントを選択して、2 から 5 のステップを繰返し、reportsList コンポーネントと同期化します。これで、path または foldersList のコンポーネントをクリックすると、reportsList コンポーネントが更新されるようになります。詳細については、別々の EnterpriseItems Bean にバインドしている複数の ItemsGrid と Path のコンポーネントの同期方法を参照してください。
ユーザーが reportsList コンポーネントにあるレポートをクリックしたときには、レポートを表示する view.jsp ページにユーザーをリダイレクトする必要があります。このアクションは、ItemClicked イベントのトリガによって開始されます。この機能を有効にするには、いくつかの操作が必要です。
reportsList コンポーネントのプロパティ ビューで、[autoHandleEvents]チェック ボックスをオフにします。デフォルトのイベント処理を無効にすることによって、ユーザーがグリッド内の項目をクリックした場合の新しい動作をプログラムできます。
reportsList コンポーネントの actionListener 属性に追加します。このメソッドがイベント データを取得し、EnterpriseItem Bean(1 つのレポートを表示)の項目 ID を、reportsList コンポーネントでユーザーがクリックしたレポートの ID に設定できます。
詳細については、アクション メソッドを actionListener 属性に追加するを参照してください。
reportsList コンポーネントの action 属性に追加します。このメソッドは、アクション文字列を返します。faces ファイルのナビゲーション ルールは、このアクション文字列を使用してユーザーが reportsList コンポーネントでクリックした場合のユーザーのリダイレクト先を決定します。
詳細については、アクション メソッドを action 属性に追加するを参照してください。
このチュートリアルを順番に学習している場合は、既にこのナビゲーション ルールを追加しています。詳細については、ナビゲーション ルールの追加を参照してください。
reportsList コンポーネントのプロパティ ビューで、[autoHandleEvents]チェック ボックスをオフにします。contents.jsp を開き、右クリックして[ページ コードの編集]を選択すると、Contents.java ファイルの Contents クラスに追加します。String actionString = "";
import com.businessobjects.jsf.sdk.event.ItemClickedEvent;
Contents.java を保存して閉じます。reportsList コンポーネントのプロパティ ビューで、[クイック編集]タブをクリックします。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 = "";
}
}
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 = "";
}
reportsList コンポーネントのプロパティ ビューで、[クイック編集]タブをクリックします。return actionString;
contents.jsp を保存します。このメソッドは、アクション メソッドで設定されたアクション文字列を返します。ユーザーが reportsList コンポーネントの最初の列にあるレポート タイトルをクリックすると、この文字列が“view_report”に設定されます。
| Business Objects http://japan.businessobjects.com/ サポート サービス http://japan.businessobjects.com/services/ |