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 |