我只有一个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;'}">...
答案 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”,但它仍可在您的页面中使用。