これで、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
属性をFalse
に設定します。
デフォルトのイベント処理を無効にすることによって、ユーザーがグリッド内の項目をクリックした場合の新しい動作をプログラムできます。
reportsList
コンポーネントの actionListener
属性に追加します。
このメソッドがイベント データを取得し、EnterpriseItem
Bean(1 つのレポートを表示)の項目 ID を、reportsList
コンポーネントでユーザーがクリックしたレポートの ID に設定できます。
詳細については、アクション メソッドを actionListener 属性に追加するを参照してください。
reportsList
コンポーネントの action
属性に追加します。
このメソッドは、アクション文字列を返します。faces
ファイルのナビゲーション ルールは、このアクション文字列を使用してユーザーが reportsList
コンポーネントでクリックした場合のユーザーのリダイレクト先を決定します。
詳細については、アクション メソッドを action 属性に追加するを参照してください。
faces-c onfig.xml
ファイルに、ユーザーを view.jsp にリダイレクトするナビゲーション ルールを追加します。
このウォークスルーを順番に学習している場合には、すでにこのナビゲーション ルールを追加しています。詳細については、レポート表示に関するナビゲーション ルールを参照してください。
ヒント または、contents.jsp を右クリックして、[ページ コードの編集]をクリックします。
import com.businessobjects.jsf.sdk.event.ItemClickedEvent;
Contents
クラスに追加します。
String actionString = "";
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();
reportsList
コンポーネントを選択します。
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();
メモ この手順では、Contents.java を開いて編集します。
Contents
クラスに追加します。
reportsList
コンポーネントを選択します。
action
属性を #{pc_ Contents.viewReport}
に設定します。
ここでは、Contents.java ページ コード クラス(Backing Bean)にある viewReport
という名前のメソッドにバインドするメソッドを作成します。
このメソッドは、actionListener
属性のアクション メソッドで指定したアクション文字列を返します。ユーザーが reportsList
コンポーネントの最初の列にあるレポート タイトルをクリックすると、この文字列が“view_report”に設定されます。
Business Objects http://japan.businessobjects.com/ サポート サービス http://japan.businessobjects.com/services/ |