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