これで、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 属性に追加するを参照してください。
このチュートリアルを順番に学習している場合は、既にこのナビゲーション ルールを追加しています。詳細については、ナビゲーション ルールの追加を参照してください。
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 == 1)
{
actionString = "view_report";
}
else
{
actionString = "";
}
reportsList
コンポーネントのプロパティ ビューで、[クイック編集]タブをクリックします。return actionString;
contents.jsp
を保存します。このメソッドは、アクション メソッドで設定されたアクション文字列を返します。 ユーザーが reportsList
コンポーネントの最初の列にあるレポート タイトルをクリックすると、この文字列が“view_report”に設定されます。
import com.businessobjects.jsf.sdk.event.ItemClickedEvent;
String actionString = "";
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 = "";
}
}
}
if (event instanceof ItemClickedEvent)
ItemClickedEvent currentEvent = (ItemClickedEvent) event;
String reportID = currentEvent.getEventArgs().getItemID();
getEnterpriseItem().setItemID(reportID);
int columnIndex = currentEvent.getEventArgs().getColumnIndex();
if (columnIndex == 1)
{
actionString = "view_report";
}
else
{
actionString = "";
}
public String viewReport()
{
return actionString;
}
Business Objects http://japan.businessobjects.com/ サポート サービス http://japan.businessobjects.com/services/ |