在primefaces中对动态数据表列进行分组3.5

时间:2014-02-03 12:25:42

标签: jsf-2 primefaces

假设我有一个<p:datatable>,其中包含2个静态列和一个动态列列表。如何仅在动态列上添加标题?
更具体地说,这是它必须看起来的样子:

-------------------------------------------------------------------------
|               |               |         Header over dynamic columns   |
| StaticColumn1 | StaticColumn2 |----------------------------------------
|               |               | DynamicCol1 | DynamicCol2 | ........  |
-------------------------------------------------------------------------
|               |               |             |             |           |
-------------------------------------------------------------------------
|               |               |             |             |           |
-------------------------------------------------------------------------

我已经尝试使用<p:columnGroup>,但似乎它不支持<p:columns> 提前谢谢。

1 个答案:

答案 0 :(得分:11)

阅读Primefaces文档后,我发现此功能未实现(至少在4.0版本之前),所以我想出了一个解决方法:

<p:dataTable value="#{backedBean.datatableList}" var="datatableRow">
    <p:columnGroup type="header">
        <p:row>
            <p:column rowspan="2" headerText="StaticColumn1"/>
            <p:column rowspan="2" headerText="StaticColumn2"/>
            <p:column colspan="#{backedBean.listOfDynamicColumns.size()}" 
                  headerText="Header over dynamic columns" />
        </p:row>
        <p:row>  
            <c:forEach items="#{backedBean.listOfDynamicColumns}" var="dynamicColumn">
                <p:column headerText="#{dynamicColumn.name}" />
            </c:forEach>
        </p:row>
    </p:columnGroup> 

    <p:column>
        #{datatableRow.value1}
    </p:column>
    <p:column>
        #{datatableRow.value2}
    </p:column>
    <c:forEach items="#{backedBean.listOfDynamicColumns}" var="dynamicColumn">
        <p:column>
            #{datatableRow[dynamicColumn]}
        </p:column>
    </c:forEach>

</p:dataTable>

请注意,我使用的是<c:forEach> 构建时标记而不是<ui:repeat>,这是渲染时标记