3

我有一个包含多个 IFrame 的 XPage(“xBase”),每个 IFrame 在我的数据库中显示一个 XPage(“xIFrame”)。单击 xBase 中的按钮时,会设置 sessionScope 变量,并部分刷新显示该变量的标签(参见示例代码)。只要没有太多 IFrame,以这种方式显示变量就可以正常工作。在下面的简短演示示例中,最多只能显示 3 个 IFrame,但一旦存在 4 个或更多,就不再设置 sessionScope 变量。

我在 Notes Client 8.5.3、Firefox 13.0.1 和 Safari 5.1.7 中测试了给定的示例,结果相同。部分刷新本身似乎没有问题,因为刷新显示当前时间的标签可以正常工作。谁能告诉我问题是什么?

XPage“ xBase ”:

<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core" xmlns:xc="http://www.ibm.com/xsp/custom">

<xp:this.beforePageLoad><![CDATA[#{javascript:sessionScope.remove("testvar");}]]></xp:this.beforePageLoad>

<xp:div id="divIFrames">
<iframe src="xIFrame.xsp?para0=abc" id="iframe0" name="iframe0"></iframe>
<iframe src="xIFrame.xsp?para0=def" id="iframe1" name="iframe1"></iframe>
<iframe src="xIFrame.xsp?para0=ghi" id="iframe2" name="iframe2"></iframe>
<iframe src="xIFrame.xsp?para0=jkl" id="iframe3" name="iframe3"></iframe>
<iframe src="xIFrame.xsp?para0=mno" id="iframe4" name="iframe4"></iframe>
</xp:div>
<xp:br/>

<xp:button value="refresh iframes" id="button0">
    <xp:eventHandler event="onclick" submit="true" refreshMode="partial" refreshId="divIFrames"></xp:eventHandler>
</xp:button>
<xp:br/><xp:br/>

<xp:label id="label"><xp:this.value><![CDATA[#{javascript:new Date().toUTCString()+": "+sessionScope.containsKey("testvar")}]]></xp:this.value></xp:label>
<xp:br></xp:br>

<xp:button value="set sessionScope / refresh label" id="button1">
    <xp:eventHandler event="onclick" submit="true"
        refreshMode="partial" refreshId="label">
        <xp:this.action><![CDATA[#{javascript:sessionScope.put("testvar","STRING");}]]></xp:this.action>
    </xp:eventHandler>
</xp:button>

</xp:view>

XPage“ xIFrame ”(只是一个显示时间和 url 的标签>简单以确保它不会导致问题):

<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">
<xp:label value="#{javascript:new Date().toUTCString()+':'+context.getUrl().toString()}"></xp:label>
</xp:view>
4

1 回答 1

8

问题可以通过添加来解决

xsp.persistence.tree.maxviews=16

到数据库的xsp.properties文件,然后清理项目。16 的值是任意的,只要确保它高于您计划使用的 IFrame 数量即可。

所有功劳都归功于提供此解决方案的 Sven Hasselbach 和 Per Henrik Lausten。

于 2013-04-17T10:09:49.630 回答