如何在p:dataTable和p:columnGroup中使用c:forEach?

时间:2015-07-24 08:24:34

标签: jsf primefaces

我想使用一种特殊形式的“动态”列分组。但是,如my other question中所述,不支持此功能。建议使用c:forEach作为可能的解决方案

使用c:forEach定义表头和列的正确方法。 我的代码BEFORE:

<p:dataTable id="resultTable" var="result" value="#{myBean.searchResults}" scrollable="true">  
    <p:columns value="#{myBean.columns}" var="column" columnIndexVar="colIndex">
        <f:facet name="header" >
            <h:outputText value="#{column.header}"/>
        </f:facet>
        <h:outputText value="#{result[column.property]}"/>
   </p:columns>
</p:dataTable>

和代码AFTER转换(不起作用 - 表格不显示):

<p:dataTable id="resultTable" var="result" value="#{myBean.searchResults}" scrollable="true">
    <p:columnGroup type="header">
        <p:row>
            <c:forEach items="#{myBean.columns}" var="column">
                <p:column headerText="#{column.header}"/>
            </c:forEach>
        </p:row>
    </p:columnGroup>
    <c:forEach items="#{myBean.columns}" var="column" >
        <p:column> 
            <h:outputText value="#{result[column.property]}"/>
        </p:column>
    </c:forEach>
</p:dataTable>

PrimeFaces版本3.4.1

1 个答案:

答案 0 :(得分:0)

&#34;书&#34;创建动态列的方法是使用数据表的"Dynamic Columns" feature

无论如何,我做了一些非常类似于你过去尝试做的事情,使用c:forEach。唯一的区别是我没有同时使用p:columnGroup。

所以,像

这样的代码
<p:dataTable id="resultTable" var="result" value="#{myBean.searchResults}" scrollable="true">
    <c:forEach items="#{myBean.columns}" var="column" >
        <p:column headerText="#{column.header}"> 
            <h:outputText value="#{result[column.property]}"/>
        </p:column>
    </c:forEach>
</p:dataTable>

应该真的有效。当您这样做时,在p:datatable分析树之前,在组件树中添加p:column objets。所以,这就是诀窍。

请注意,这会导致边缘,ajax情况出现问题。所以,如果可以,只需坚持内置的动态列功能。