2013-02-12 72 views
0

我有一个具有30个属性的Java对象。我从数据库填充对象。我只想显示非空的值。在JSF表中显示值

<table> 
    <col width="280"/><col width="130"/> 

    <ui:repeat var="ud" value="#{TreeViewController.componentData}"> 

     <tr> 
      <td> 
       <h:outputText value="componentStatsId" rendered="#{ud.componentStatsId != 0}"/> 
      </td> 
      <td> 
       <h:outputText value="#{ud.componentStatsId}" rendered="#{ud.componentStatsId != 0}"/> 
      </td> 
     </tr> 

     .......... and 40 more table rows 

    </ui:repeat> 
</table> 

我测试过创建一个简单的JSF表,如果这些值是空的,那么这些表就不会呈现。但我注意到,如果值是空的,我得到的微小空间:

enter image description here

我怎么能解决这个问题?

回答

3

是的,这将是您的代码的预期行为,因为它只是防止呈现<<h:outputText>而不是<tr><td>组件。

为了解决这个问题,你应该使用<ui:fragment>,并使用rendered属性控制<tr><td> renderization:

<ui:repeat var="ud" value="#{TreeViewController.componentData}"> 
    <ui:fragment rendered="#{ud.componentStatsId != 0}"> 
     <tr> 
      <td> 
       componentStatsId 
      </td> 
      <td> 
       #{ud.componentStatsId} 
      </td> 
     </tr> 
    </ui:fragment> 
    <!-- .......... and 40 more table rows --> 
    <ui:fragment rendered="#{ud.componentTypeId != 0}"> 
     <tr> 
      <td> 
       ... 
      </td> 
      <td> 
       ... 
      </td> 
     </tr> 
    </ui:fragment> 
</ui:repeat> 
+0

我必须把'UI:下面的'UI fragment':repeat'只有一次,或在每个表格的顶部? – 2013-02-12 21:40:18

+0

''应该在''内。请注意,''只会帮助您了解是否应该渲染(或不渲染)“”和“​​” – 2013-02-12 21:41:23

+0

我已更新答案以提供更好的示例。 – 2013-02-12 21:46:09