在 XPage(名为“xBase”)上,我在容器 (div) 内有两个 IFrame:
<xp:div id="divIFrames">
<iframe src="xTest.xsp?key=abc" id="iframe0" frameborder="0" width="100%" height="28px" scrolling="no"></iframe>
<iframe src="xTest.xsp?key=def" id="iframe1" frameborder="0" width="100%" height="28px" scrolling="no"></iframe>
<xp:label><xp:this.value><![CDATA[#{javascript:context.getUrl().toString();}]]></xp:this.value></xp:label>
</xp:div>
两个 IFrame 都指向我的数据库中的另一个 XPage“xTest”,具有不同的 URL 参数。为简单起见,“xTest”仅包含带有当前 URL 的标签:
<xp:label value="#{javascript:context.getUrl().toString()}"></xp:label>
但是,容器的部分更新不起作用,并且 URL 参数添加到“xBase”:$$ajaxid=view%3A_id1%3AdivIFrames
仅当存在超过 1 个带有 URL 参数的 iframe 时,才会出现此问题。例如,它适用于 src 中不带 URL 参数的多个 iframe 或带有 URL 参数的单个 iframe。为什么它不适用于 2 个或更多带有 URL 参数的 IFrame?有人知道我在这里做错了什么吗?
编辑:
事实证明,当 XPage 上有多个 IFrame 时,不是部分刷新而是在 sessionScope 中设置变量不起作用。由于这不适合当前的问题,我创建了一个 new one 。对于给您带来的不便,我们深表歉意!
最佳答案
xBase.xsp 中更改的标签表明部分刷新工作正常。 URL参数
?$$ajaxid=view%3A_id1%3AdivIFrames
添加 是因为这就是部分刷新的工作原理:它是对 XPage 本身的 Ajax 请求,参数是随该请求刷新的元素的 id。显示请求 URL 的标签位于刷新的 DOM 元素内,这就是您看到它的原因。
由于 context.getUrl() 方法的缓存,您有时会看到“原始”查询,有时会看到带有 Ajax 参数的 URL。如果将示例代码更改为...
facesContext.getExternalContext().getRequest().getQueryString();
...您将看到没有任何缓存的参数。
顺便说一句:我已经用 1000 个 IFrame 测试了示例代码,它对我来说没有任何问题。
请提供有关您的环境的更多信息(Domino 版本、浏览器等)
关于iframe - 多个 iframe 的部分更新不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16011768/