在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
如果有一个带有URL参数的iframe超过1个,则只会出现此问题。例如,它适用于src中的多个iframes 没有 URL参数或者带有URL参数的单个iframe。为什么它不适用于2个或更多带有URL参数的IFrame?有谁知道我在这里做错了什么?
修改:
原来不是部分刷新,但是当XPage上有多个IFrame时,sessionScope中的设置变量不起作用。由于这不适合当前的问题,我创建了new one。对于给您带来的不便,我感到很抱歉!
答案 0 :(得分:2)
xBase.xsp 中更改的标签表示部分刷新正常工作。 URL参数
?$$ajaxid=view%3A_id1%3AdivIFrames
添加了,因为这是部分刷新的工作方式:它是对XPage本身的Ajax请求,参数是随请求刷新的元素的id。显示请求URL的标签位于刷新的DOM元素内,这就是您看到它的原因。
由于 context.getUrl()方法的缓存,您有时会看到“原始”查询,有时会看到带有Ajax参数的URL。如果您将示例代码更改为...
facesContext.getExternalContext().getRequest().getQueryString();
...您将看到没有任何缓存的参数。
顺便说一句:我已经使用1000个IFrame测试了示例代码以获得乐趣,它对我没有任何问题。
请提供有关您的环境的更多信息(Domino版本,浏览器等)