1

我只有一个 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> 

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

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

而它使用style属性工作,通过改变可见性:

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

1 回答 1

2

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

您可以通过重新渲染“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”被隐藏,但它仍然在您的页面中可用。

于 2012-12-07T16:57:05.890 回答