請設想下列案例:在單一 JSP 頁面上有兩個 ItemsGrid
元件和一個 Path
元件。Path
元件的名稱為 path
,而其中一個 ItemsGrid
元件名稱為 foldersGrid
;兩者都繫結至相同的 EnterpriseItems
Bean,其命名為 foldersGrid
。這個 EnterpriseItems
Bean 代表 Crystal 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 的所有元件。按一下 [OK] 以確認同步化。
foldersList
元件,並重複步驟 2 至 5,與 reportsList
元件進行同步化。同步化的作法實際上會將兩項重要的程式碼加入應用程式。首先,會加入動作接聽項至 foldersList
和 path
元件:
actionListener="#{pc_<nameofpage>.doAction}"
此外,還會在頁面 (由 RAD 建立,通常命名為 <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/ |