2011-05-23 63 views
4

我有一个ajax调用刷新下表。如果所有值都为空,我可以隐藏“Score”列(它是BigDecimal)吗?否则应该显示?如何使用ajax显示/隐藏JSF数据表列?

<h:dataTable id="theTable" value="#{MyBean.people}" var="person"> 
    <h:column> 
    <f:facet name="header"> 
     <h:outputText value="Name" /> 
    </f:facet> 
    #{person.name} 
    </h:column> 
    <h:column rendered="#{person.score != null}"> 
    <f:facet name="header"> 
     <h:outputText value="The Score" /> 
    </f:facet> 
    #{person.score} 
    </h:column> 
</h:dataTable> 

即使分数不为空,呈现的当前总是使列不呈现。

回答

5

有没有“简单”的方法来做到这一点,你必须自己看看完整的集合。你可以写一个检查列表为空值的辅助方法:

public boolean isAllScoresNull() { 
    for(Person p : people) { 
     if(p.getScore != null) return false; 
    } 
    return true; 
} 

,并在页面中使用通过EL:

... 
<h:column rendered="#{myBeanController.allScoresNull}"> 
... 

你也可以定义该任务的TagFunction。

+0

关于第二个想法,您可能想使用类似org.apache.commons.collections.CollectionUtils.isEmpty(people)的东西来检查上面示例中的List ... – 2011-05-23 14:31:53

+0

谢谢,我想知道是否创建一个单独的方法在Bean上是一个可能的解决方案。 – Ryan 2011-05-23 14:34:16

+0

试过了,它工作。谢谢 – Ryan 2011-05-23 14:52:56