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
元件的 autoHandleEvents
屬性為 False
。
關閉預設事件處理時,您可以針對使用者按一下格線項目時所發生的行為撰寫新的程式。
reportsList
元件的 actionListener
屬性。
這個方法會取得事件資料,並允許您將 EnterpriseItem
Bean (代表單一報表) 的項目 ID 設定為使用者在 reportsList
元件中所按下之報表的 ID。
如需詳細資訊,請參閱將動作方法加至 actionListener 屬性。
reportsList
元件的 action
屬性。
這個方法會傳回動作字串。faces
檔案中的導覽規則會使用這個動作字串,決定使用者按一下 reportsList
元件時,要將其重新導向的目標。
如需詳細資訊,請參閱將動作方法加至動作屬性。
faces-c onfig.xml
檔案,以重新導向使用者到 view.jsp。
如果您跟隨逐步解說循序練習,就已經加入了這個導覽規則。如需有關的詳細資訊,請參閱 檢視報表的導覽規則。
提示 另外,您也可以利用滑鼠右鍵按一下 [contents.jsp],然後按一下 [Edit Page Code]。
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 頁面程式碼類別 (備援 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 頁面程式碼類別 (備援 Bean) 中名為 viewReport
的方法。
這個方法會傳回 actionListener
屬性之動作方法所設定的動作字串。當使用者按一下 reportsList
元件第一個資料行中的報表標題時,會將這個字串設定為 [view_report]。
Business Objects http://www.china.businessobjects.com Support services http://www.china.businessobjects.com |