是否有可能延遲一些控件加載到xpage上?我可以延遲加載一個x頁面上的一些控件加載到頁面後
這就是問題所在:比方說,你有一個控件可以完成一個fultextsearch並在重複控制中顯示結果。此ft搜索可能需要很長時間,並且會使網頁加載處於等待狀態,直到搜索結果準備就緒。
我希望我的頁面能夠初始化加載大部分數據,並且一些「耗時」的控件應該在初始加載之後作爲特殊請求加載到頁面中。
用這種方式,用戶將立即看到網頁,但頁面上的一些數據稍後會加載,而不會使服務器處於等待狀態。
可能嗎?
是否有可能延遲一些控件加載到xpage上?我可以延遲加載一個x頁面上的一些控件加載到頁面後
這就是問題所在:比方說,你有一個控件可以完成一個fultextsearch並在重複控制中顯示結果。此ft搜索可能需要很長時間,並且會使網頁加載處於等待狀態,直到搜索結果準備就緒。
我希望我的頁面能夠初始化加載大部分數據,並且一些「耗時」的控件應該在初始加載之後作爲特殊請求加載到頁面中。
用這種方式,用戶將立即看到網頁,但頁面上的一些數據稍後會加載,而不會使服務器處於等待狀態。
可能嗎?
您可以將它們打包到面板中,並將其呈現狀態設置爲呈現=#{viewScope.pageFullyLoaded}。然後在onLoad事件中有一個XSP。 partialRefresh請求你在哪裏設置viewScope.pageFullyLoaded = true 有點醜但可行。現在,您可以將該代碼包裝到您自己的自定義控件中,以便您可以擁有「lazyGrid」,「lazyPanel」等。
使用呈現的缺點是所有值綁定仍然會評估,即使相應的標記不會發送到該頁面。所以這裏的訣竅是確保組件直到你想要的時候才存在。
每個組件都有一個getChildren()方法。這返回一個可變列表組件,它有一個add()方法。這允許您在頁面加載時或稍後在事件期間即時將組件添加到頁面。爲了達到您要做的目的,您希望推遲添加「昂貴」的組件直到後續事件。
創建直接附加到視圖root()的事件處理程序,給它一個唯一的ID(例如「loadExpensiveComponentsEvent」,將其刷新模式設置爲partial,將刷新ID設置爲任何div或面板將包含搜索結果,並將其事件名稱設置爲任意事件(例如「loadExpensiveComponents」),這樣可以防止事件被實際的用戶行爲觸發,將事件的代碼設置爲將注入組件的SSJS
然後添加腳本塊)在頁面加載後觸發事件:
XSP.addOnLoad(function(){ XSP.firePartial(null,「#{id:loadExpensiveComponentsEvent}」) ; });
您的頁面將無需搜索結果組件加載。頁面完全加載後,將自動觸發組件注入事件。
有關如何編寫注入事件的指導,請打開已從現有頁面生成的Java文件,以查看需要注入的組件以及要將其值設置爲的內容。
有趣的解決方案,謝謝 – 2012-02-21 10:23:01
不知道爲什麼我以前沒有想到這一點。 extlib中的動態內容控制實際上解決了這個問題。在客戶端加載頁面時,可以使用javascript和ssjs觸發onClientLoad。
我現在面臨的一個問題是,我已經在我的網站上使用了dcc,所以我需要在我的dcc中添加另一個dcc。這似乎有點bug。我已經將它報告給openNTF的extlib團隊。
你的意思是我使用客戶端js的partialrefresh和服務器端JS設置VIEWScope? – 2012-02-20 11:47:20
如果面板未呈現,XSP事件是否真的可以工作? – 2012-02-20 12:14:15
這就是爲什麼你需要把它包裝在一個渲染的 – stwissel 2012-02-21 17:37:01