【问题标题】:reRender doesn't refresh after event事件后重新渲染不刷新
【发布时间】:2012-12-07 16:43:44
【问题描述】:

我只有一个 selectOneRadio 并希望根据布尔值显示(或不显示)面板(使用 a4j 事件后的基本重新渲染)。 我与布尔值的绑定很好,动作确认布尔值在点击时发生变化:

这是我的selectOneRadio

<h:selectOneRadio  value="#{myController.myBoolean}">
    <a4j:support event="onclick" action="#{...}"  reRender="myPanel" />
        <f:selectItem itemLabel="Yes" itemValue="#{true}"/>
        <f:selectItem itemLabel="No" itemValue="#{false}"/>
</h:selectOneRadio> 

为什么使用rendered属性后reRender不起作用(无效):

<a4j:outputPanel id="myPanel"  rendered="#{myController.myBoolean}">...

虽然它使用style 属性工作,但通过更改可见性:

<a4j:outputPanel id="myPanel"  style="#{myController.myBoolean ? 'visibility:visible;':'display:none;'}">...
  • Richfaces 3.3.3.Final
  • 每个浏览器都有相同的错误

【问题讨论】:

    标签: ajax jsf richfaces rendering


    【解决方案1】:

    这个问题可以解释如下。 最初,您的面板“myPanel”未渲染,因为渲染属性设置为false。然后现在通过选择selectOneRadio 组件将呈现的值更改为true。然后,您将通过在您的a4j:support 标签中使用reRender="myPanel" 来访问reRender“myPanel”。
    但不幸的是,没有“myPanel”需要重新渲染,因为您的页面中没有这样的元素(因为它没有被渲染)。

    您可以通过重新渲染“myPanel”的父级来解决这个问题。例如,如果“myPanel”有一个父级panel,如下所示,

    <a4j:outputPanel id="parentPanel">
        <a4j:outputPanel id="myPanel"  rendered="#{myController.myBoolean}">
               .......
        </a4j:outputPanel>
    </a4j:outputPanel>
    

    现在reRender父如下

    <a4j:support event="onclick" action=#{...}"  reRender="parentPanel" />
    

    注意:当您更改 visibility 而不是 rendered 属性时,它会起作用,因为虽然“myPanel”被隐藏了,但它仍然可以在您的页面中使用。

    【讨论】:

    • 非常感谢,这行得通。我怀疑问题来自那里,但我没有设法绕过。感谢您的提示!
    猜你喜欢
    • 2022-01-03
    • 1970-01-01
    • 2022-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-23
    • 1970-01-01
    • 2017-09-27
    相关资源
    最近更新 更多