これで、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/ |