在JSF表中显示值

时间:2013-02-12 21:21:21

标签: jsf jsf-2

我有一个包含30个属性的Java对象。我从数据库填充对象。我想只显示非空的值。

<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

我如何解决这个问题?

1 个答案:

答案 0 :(得分:3)

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

要解决此问题,您应使用<ui:fragment>并使用<tr>属性控制<td>rendered渲染:

<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>