【问题标题】:JSF - iFrame src attribute does not match HTML displayJSF - iFrame src 属性与 HTML 显示不匹配
【发布时间】:2011-05-29 12:15:03
【问题描述】:

我的页面中有一个 iFrame,如下所示:

<h:panelGroup id="gameDiv">
    <f:verbatim>
        <iframe src="/levelup/resources/#{cc.attrs.src_dir}/#{cc.attrs.src_html}"     width="700px" height="800px" frameborder="0" id="gameFrame">
         </iframe>
    </f:verbatim>
</h:panelGroup>

基本上,“src”变量是使用 JSF 2.0 EL 绑定的,并从支持 bean 获取其值。

然后我使用一个表单来更新这个值,并刷新整个页面。在呈现的 HTML 中,我可以看到我的 div 的“src”已更新。但是,HTML 页面仍然显示旧页面。

我认为这个问题类似于2 iframes with the same display even if the src are different,我尝试了已经提到的解决方案(使用时间戳使 src 唯一,或者在每个页面加载时将它们重置为“about:blank”)。然而,它们都不起作用。

有关信息,更新支持 bean 的表单是:

<h:form id="gameSelectionForm">
    <h:selectOneMenu id="gameSelection">
        <f:selectItems value="#{gameBean.gameIds}" />
    </h:selectOneMenu>
    <p:commandButton id="gameSelector" action="#{gameBean.changeGame}" update="gameScoreFieldset, gameDiv" />
</h:form>

任何提示都会非常有用。

提前致谢,
塞巴斯蒂安

【问题讨论】:

  • 问题似乎出在 FireFox 上;它可以在 Chrome 和 IE 上正常运行。
  • 删除“f:verbatim”标签也不能解决问题。

标签: html jsf iframe primefaces


【解决方案1】:

您正在使用 JS/Ajax 更改 iframesrc,但不重新加载其内容。

有两种方法可以解决这个问题:

  • 只是不要使用 JS/ajax。同步 HTTP 请求将重新加载整个文档,从而自动重新加载 iframe

    <p:commandButton ajax="false" />
    
  • 使用 JS 强制重新加载。在&lt;iframe&gt; 之后添加以下

    <script>document.getElementById('gameFrame').location.reload()</script>
    

哦,你肯定需要删除&lt;f:verbatim&gt;。从 JSF 1.2 开始,该标签是 utterly useless

【讨论】:

  • 两种修改的组合对我有用。非常感谢!
  • 即使只使用 ajax=false 也能解决问题。但是,仅在 标记内插入脚本是行不通的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-07
  • 1970-01-01
  • 1970-01-01
  • 2010-11-11
  • 1970-01-01
相关资源
最近更新 更多