contents.jsp 頁面現在即可向使用者顯示資料夾及報表的清單,並允許導覽這些資料夾。若要完成頁面,則必須實作幾項功能,以決定使用者按一下頁面上各種組件時所要採取的動作。
因為 path 和 foldersList 元件都繫結至相同的 EnterpriseItems Bean (代表資料夾),當使用者按下其中一個元件時,另一個就會自動更新。因此,按一下 folderList 元件中的資料夾,便會更新 path 元件中的導覽路徑。
不過,頁面上的 reportsList 元件是繫結至不同的 EnterpriseItem Bean (代表報表)。當使用者按一下 path 或 foldersList 元件中的資料夾時,該資料夾包含的報表必須顯示在 reportsList 元件中。為了報表之顯示,您就必須在元件之間同步化 EnterpriseItems 資料。
path 元件。reportsList 元件,與目前元件進行同步化。注意:
如果元件和其他元件一樣都繫結至相同的 EnterpriseItems Bean,當嘗試與此元件同步化時,會顯示訊息指出有多個元件共用相同 itemSource 屬性值 (EnterpriseItems Bean);此外,如果將同步化加入選取的元件,同步化也會加至繫結到這個 Bean 的所有元件。按一下 [確定] 以確認同步化。
foldersList 元件,並重複步驟 2 至 5,與 reportsList 元件進行同步化。按一下 path 或 foldersList 元件會立即更新 reportsList 元件。如需其他資訊,請參閱我要如何同步化繫結至不同 EnterpriseItems Bean 的多個 ItemsGrid 及 Path 元件?。
當使用者按一下 reportsList 元件中的報表時,您想要將他們重新導向至 view.jsp 頁面,以便在其中建構報表。這個動作會在觸發 ItemClicked 事件時啟動。若要啟用這個功能,您必須執行幾項程序:
reportsList 元件的 [屬性] 檢視中,清除 [autoHandleEvents] 核取方塊。關閉預設事件處理時,您可以針對使用者按一下格線項目時所發生的行為撰寫新的程式。
reportsList 元件的 actionListener 屬性。這個方法會取得事件資料,並允許您將 EnterpriseItem Bean (代表單一報表) 的項目 ID 設定為使用者在 reportsList 元件中所按下之報表的 ID。
如需詳細資訊,請參閱將動作方法加至 actionListener 屬性。
reportsList 元件的 action 屬性。這個方法會傳回動作字串。faces 檔案中的導覽規則會使用這個動作字串,決定使用者按一下 reportsList 元件時,要將其重新導向的目標。
如需詳細資訊,請參閱將動作方法加至動作屬性。
如果您跟隨教學課程循序練習,就已經加入了這個導覽規則。如需有關的詳細資訊,請參閱 加入導覽規則。
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://www.taiwan.businessobjects.com/ 支援服務 http://www.businessobjects.com/services/support/ |