我只是有一个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> 为什么reRender在使用rendered属性后不能工作(没有效果):
<a4j:outputPanel id="myPanel" rendered="#{myController.myBoolean}">...然而,它使用style属性工作,方法是更改可见性:
<a4j:outputPanel id="myPanel" style="#{myController.myBoolean ? 'visibility:visible;':'display:none;'}">...发布于 2012-12-07 16:57:05
这个问题可以解释如下。最初,您的面板"myPanel“没有呈现,因为呈现属性被设置为false。然后,通过选择true组件将呈现的值更改为selectOneRadio。然后,您将通过在reRender标记中使用reRender="myPanel"来使用"myPanel“。
但是不幸的是,没有"myPanel“作为reRendered,因为您的页面中没有这样的元素(因为它没有呈现)。
您可以通过reRendering ( "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“是隐藏的,但它仍然可以在您的页面中使用。
https://stackoverflow.com/questions/13767317
复制相似问题