我想使用一种特殊形式的“动态”列分组。但是,如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
答案 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情况出现问题。所以,如果可以,只需坚持内置的动态列功能。