事件发生后reRender不刷新

时间:2012-12-07 16:43:44

标签: ajax jsf richfaces rendering

我只有一个selectOneRadio并希望显示(或不显示)一个面板,具体取决于布尔值(a4j事件后的基本reRender)。 我与布尔值的绑定很好,并且操作确认布尔值在单击时改变:

这是我的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
  • 每个浏览器都有相同的错误

1 个答案:

答案 0 :(得分:2)

问题可以解释如下。 最初,您的面板“myPanel”未呈现,因为呈现的属性设置为false。然后,现在通过选择true组件将渲染值更改为selectOneRadio。然后,您使用reRender标记中的reRender="myPanel"转到a4j:support“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”,但它仍可在您的页面中使用。