2013-02-11 81 views
0

我有一个p:outputPanel,如果我有一个带有数据的Java对象,我想渲染它。如果对象为空,我不想渲染面板。每次AJAX调用后渲染p:outputPanel

<h:form id="treeform"> 
    <p:outputPanel id="outputComponent" rendered="#{TreeViewController.compProfile}"> 
     <div> 
      ......... 
     </div> 
    </p:outputPanel> 
</h:form> 

public boolean getCompProfile() 
{ 

    if (cd == null) 
    { 
     return false; 
    } 
    else 
    { 
     return true; 
    } 
} 

我注意到代码工作正常。如果对象为null,则布尔值为false,并且不显示面板。但是我发现的问题是,当我再次调用AJAX时,无论Java对象是否为null,布尔值都始终为false。我可以在AJAX调用后以某种方式配置p:outputPanel来检查#{TreeViewController.compProfile}属性是否呈现面板。

回答

8

变化

<p:outputPanel id="outputComponent" rendered="#{TreeViewController.compProfile}"> 

进入

<p:outputPanel autoUpdate="true"> 
    <p:outputPanel id="outputComponent" rendered="#{TreeViewController.compProfile}"> 
</p:outputPanel> 

还是不加包装和treeform ID添加到您的update attribue你的Ajax(p:ajaxp:commandButton

像这样update="treeform"

+0

如果组件未放在第一位,则不能自动更新。另外,'autoUpdate =“true”'没有必要在update中指定它的客户端ID。 – BalusC 2013-02-12 11:32:22

+0

@BalusC,你说的对,修正了答案......谢谢 – Daniel 2013-02-12 12:06:29

+0

是的,这就解决了这个问题。谢谢! – 2013-02-12 12:07:22