2013-07-30 76 views
1

要將XPage中的值移交給自定義控件,應該使用哪種方法? a)在設計時定義自定義控件中的屬性。使用計算值填寫XPage中的屬性。運行時通過自定義控件中的「compositeData」使用該值。 或 b)將值放入BeforePageLoad事件中的XPage中的會話範圍變量中。將會話作用域變量綁定到自定義控件中的字段。最佳實踐:sessionscope變量或屬性定義

回答

11

會話範圍主要用於確保在用戶在頁面之間導航時值保持不變。我喜歡將它稱爲「購物車」範圍:如果您在Domino中構建電子商務網站,則不希望該網站忘記用戶已將產品添加到購物車,只是因爲他們點擊回家頁。因此,此範圍對於記憶搜索/排序/過濾選項等功能也非常有用,因爲用戶導航應用程序時,每當他們在其他地方導航並返回時,它都會記住其先前的行爲,而不必將此信息永久存儲在NSF中。

但是,若要將頁內信息從容器傳遞到自定義控件,compositeData絕對是您的選擇。這是因爲該變量僅在處理相關控件的持續時間內使用傳遞的參數進行填充。一旦處理完該控件後,將自動清除所有傳遞參數的指針,與每個用戶會話期間存儲相同信息的情況相比,這可爲每個實例提供增量可伸縮性改進。

會出現重疊的情況:給定的自定義控件可能會引用適合存儲在會話範圍內的信息。在這種情況下我喜歡這兩種技術混合...例如:

<xp:inputText value="#{sessionScope[compositeData.scopeKey]}" />

上述語法允許自定義控制通過它的容器被傳遞對於其中在會話範圍的相關信息是標識符存儲。這提供了一些嚴重的靈活性,因爲我可以將相同的控件放到多個上下文中,每個控件都告訴控件應該檢索/存儲在範圍內的哪些信息。