首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >事件后reRender不刷新

事件后reRender不刷新
EN

Stack Overflow用户
提问于 2012-12-07 16:43:44
回答 1查看 4.8K关注 0票数 1

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

这是我的selectOneRadio

代码语言:javascript
复制
<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属性后不能工作(没有效果):

代码语言:javascript
复制
<a4j:outputPanel id="myPanel"  rendered="#{myController.myBoolean}">...

然而,它使用style属性工作,方法是更改可见性:

代码语言:javascript
复制
<a4j:outputPanel id="myPanel"  style="#{myController.myBoolean ? 'visibility:visible;':'display:none;'}">...
  • 里奇斯3.3.3最后
  • 每个浏览器上都有相同的错误
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-07 16:57:05

这个问题可以解释如下。最初,您的面板"myPanel“没有呈现,因为呈现属性被设置为false。然后,通过选择true组件将呈现的值更改为selectOneRadio。然后,您将通过在reRender标记中使用reRender="myPanel"来使用"myPanel“。

但是不幸的是,没有"myPanel“作为reRendered,因为您的页面中没有这样的元素(因为它没有呈现)。

您可以通过reRendering ( "myPanel“的父级)克服这个问题。例如,如果"myPanel“具有如下所示的父panel

代码语言:javascript
复制
<a4j:outputPanel id="parentPanel">
    <a4j:outputPanel id="myPanel"  rendered="#{myController.myBoolean}">
           .......
    </a4j:outputPanel>
</a4j:outputPanel>

现在,如下所示reRender父级

代码语言:javascript
复制
<a4j:support event="onclick" action=#{...}"  reRender="parentPanel" />

注意:当您更改visibility而不是rendered属性时,它可以工作,因为尽管"myPanel“是隐藏的,但它仍然可以在您的页面中使用。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13767317

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档