我們有一些手風琴頁面。一些手風琴開始時是空的,當用戶通過部分更新點擊手風琴欄時,手風琴會被填滿。在開始時,這可以正常工作,但如果用戶在稍後階段打開手風琴,則不起作用。XPages:丟失viewScoped bean(再次)
它發生在用戶離開手風琴時關閉,切換到不同的頁面在相同的NSF,做了很多事情,然後回到第一頁。不知何故,與部分刷新相關的代碼不會被執行。
下面是一些代碼:
<xe:djAccordionPane id="djAccordionPane3">
<xp:div id="outerPanelModels">
<xc:ccModelView>
<xc:this.rendered><![CDATA[#{javascript:UserData.getVar("ShowModels")}]]></xc:this.rendered>
</xc:ccModelView>
</xp:div>
<xe:this.dojoAttributes>
<xp:dojoAttribute name="Title" value="#{javascript:constants.Models}"></xp:dojoAttribute>
</xe:this.dojoAttributes>
<xp:eventHandler event="onShow" submit="true" refreshMode="partial"
refreshId="outerPanelModels">
<xp:this.onComplete><![CDATA[hideAjaxLoader();]]></xp:this.onComplete>
<xe:this.script><![CDATA[if(document.getElementById("#{id:outerPanelModels}").childElementCount==0) {
showAjaxLoader();
return true
}
return false;]]></xe:this.script>
<xe:this.action><![CDATA[#{javascript:UserData.putVar("ShowModels", true)}]]></xe:this.action>
</xp:eventHandler>
</xe:djAccordionPane>
的UserData是一個sessionScope豆。 putVar和getVar曾經是一個viewScope bean,我猜想bean會以某種方式被銷燬(實際上是這樣),所以我將代碼移到了sessionScope中。
爲什麼不執行底部的代碼行,即UserData.putVar(「ShowModels」,true)的行?任何線索?解決辦法可能是?
謝謝!
更新 將應用程序設置爲將所有頁面保留在內存中。
xsp.properties:
xsp.error.page=xError.xsp
xsp.library.depends=com.ibm.xsp.extlib.library
xsp.min.version=8.5.3
xsp.persistence.mode=basic
xsp.resources.aggregate=false
xsp.theme.web=extendOneUI.theme
xsp.openlog.expireDate=15
xsp.error.page=Error.xsp
xsp.persistence.viewstate=fullstate
# org.openntf.domino.xsp=godmode,marcel,bubbleExceptions
xsp.application.forcefullrefresh=true
xsp.error.page.default=true
xsp.session.timeout=180
xsp.application.timeout=180
您確定該行沒有執行嗎?您是否向該方法添加了打印語句,然後檢查控制檯以驗證? –
putVar做的第一件事是在(內部)日誌中添加一行。該日誌可以在單獨的屏幕上檢查。空空如也。部分刷新確實發生了,實際上,這只是代碼不被執行。如果你想我添加一個System.out.print,我會這樣做,只是爲了確保。 –
只有當this.script中的客戶端代碼返回true時,纔會運行this.action中的服務器端代碼。你期望它每次都運行嗎? –