1

我们使用 iFrame 在 GUI 上显示应用程序中生成的报告。报告在 iframe 内的 GUI 上正确显示。但是,在某些按钮上单击我希望 iframe 消失(render=false)。但令我完全不相信的是,这并没有发生。

在页面上呈现 iframe 后,除非我刷新整个页面,否则它不会被 render=false。

iframe 放置在<rich:layoutPanel>. 我尝试将 iframe 保留在内部<h:panelGrid><h:panelGroup>使用那里的渲染属性对其进行渲染,但是 iframe 本身并没有出现。当它出现时,即使将渲染属性<h:panelGrid>设置为 false,iframe 也不会被渲染=false。

我知道 iframe 会针对整个页面的现有 DOM 创建一个单独的 DOM,但应该有一些方法可以根据某些按钮单击来呈现 iframe。

iFrame 的代码片段:

<h:panelGroup id="checkIFrame" rendered="#{Bean.renderPanelGroup}">
    <iframe frameborder="0" align="left"
        src="${pageContext['request'].contextPath}/moduleName/PageName.jsf"
        name="PdfPnl" id="PdfPnl" scrolling="auto" width="750"
        height="500" marginheight="5" marginwidth="10">
    </iframe>
</h:panelGroup>

单击哪个按钮的代码片段,应呈现 iframe=false

<a4j:outputPanel id="outButton">
    <a4j:commandButton value="Send" immediate="true" status="Hello" 
        rendered="#{Bean.renderTrueFalse}" reRender="outButton,checkIFrame"
        id="Again" process="FormName" actionListener="#{bean.affirmative}"
    />
</a4j:outputPanel>

如何根据某些按钮单击呈现 iframe=false/true?

4

1 回答 1

5

您不能重新渲染定义了已渲染属性的组件。您需要重新渲染未定义渲染属性的 checkIFrame 的父组件。

更新:

<h:panelGroup id="aParentPanel">
     <h:panelGroup id="checkIFrame" rendered="#{Bean.renderPanelGroup}">
         <iframe frameborder="0" align="left"
             src="${pageContext['request'].contextPath}/moduleName/PageName.jsf"
             name="PdfPnl" id="PdfPnl" scrolling="auto" width="750"
             height="500" marginheight="5" marginwidth="10">
         </iframe>
     </h:panelGroup>
</h:panelGroup>

...
<a4j:commandButton reRender="aParentPanel".../>

...

于 2012-08-17T09:49:22.647 回答