根据条件在JSF页面中渲染IFrame

Ang*_*ons 1 iframe jsf rendering richfaces jsf-2

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

一旦iframe在页面上呈现,除非我刷新整个页面,否则它不会被渲染= false.

iframe放在里面<rich:layoutPanel>.我尝试将iframe保留在内部<h:panelGrid><h:panelGroup>使用render属性渲染它,但是iframe本身没有出现.当它出现时,即使render属性<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>
Run Code Online (Sandbox Code Playgroud)

点击按钮的代码段,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>
Run Code Online (Sandbox Code Playgroud)

如何基于某些按钮单击渲染iframe = false/true?

dce*_*chi 5

您无法reRender在其上定义了呈现属性的组件.您需要reRender一个没有定义渲染属性的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".../>
Run Code Online (Sandbox Code Playgroud)

...