請設想下列案例:在單一 JSP 頁面上有兩個 ItemsGrid 元件和一個 Path 元件。Path 元件的名稱為 path,而其中一個 ItemsGrid 元件名稱為 foldersGrid;兩者都繫結至相同的 EnterpriseItems Bean,其命名為 foldersGrid。這個 EnterpriseItems Bean 代表 BusinessObjects Enterprise 內的系統資料夾階層,可以讓使用者使用 path 及 foldersGrid 進行導覽。因為兩個元件都繫結至相同的 EnterpriseItems Bean,所以會自動同步化;如此一來,當使用者以其中一個元件執行導覽時,另一個元件便會反映這些變更。
不過,第二個 ItemsGrid 元件命名為 reportsList,其繫結至叫做 reports (代表任何指定資料夾中的一組 Crystal 報表) 的其他 EnterpriseItems Bean。要如何才能讓 reportsList 配合頁面上的其他元件一起工作?解決之道就是依正確順序同步化元件。
要讓第二個 ItemsGrid 元件 reportsList 以有意義的方式在頁面內搭配其他元件一起工作,元件就必須同步化;如此一來,當使用者導覽至 foldersList 或 path 內的特定資料夾層級時,reportsList 才會顯示存在於該相同資料夾層級的報表。也就是說,每當使用者按一下資料夾格線或 Path 元件中的資料夾時,都必須將 reports EnterpriseItems Bean 的 parentItemID 屬性設定為 folders Bean parentItemID 屬性的目前值。結果,報表格線就會始終顯示相同層級的資訊。若要啟用元件之間的協調運作,您可以設定 foldersList 元件和 path 元件的同步化。
path 元件。reportsList 元件,與目前元件進行同步化。注意:
如果元件和其他元件一樣都繫結至相同的 EnterpriseItems Bean,當嘗試與此元件同步化時,會顯示訊息指出有多個元件共用相同 itemSource 屬性值 (EnterpriseItems Bean);此外,如果將同步化加入選取的元件,同步化也會加至繫結到這個 Bean 的所有元件。按一下 [確定] 以確認同步化。
foldersList 元件,並重複步驟 2 至 5,與 reportsList 元件進行同步化。同步化的作法實際上會將兩項重要的程式碼加入應用程式。首先,會加入動作接聽項至 foldersList 和 path 元件:
actionListener="#{pc_<nameofpage>.doAction}"
此外,還會在頁面 (由 Rational Application Developer 建立、通常命名為 <nameofpage>.java) 的程式碼後置 (Code
public void doAction() {
reports.setParentItemID(folders.getParentItemID());
}
如您所見,同步化的順序格外重要。在範例中,我們已經讓 foldersList 針對 reportsList,並讓 path 針對 reportsList 進行同步化。所以在按一下 foldersList 或 path 時,reportsList 便會同步變化。但反過來的話,情況就不是這樣了。您並沒有讓 reportsList 對 foldersList 同步化,因此 reportsList 的動作不會影響 foldersList。在決定選取哪一個元件來加以同步化設定時,您始終要考慮到您希望在應用程式中達成的行為。
| Business Objects http://www.taiwan.businessobjects.com/ 支援服務 http://www.businessobjects.com/services/support/ |