我通过p:datatable
显示多个ui:repeat
,以下代码段说明了我在做什么:
<ui:repeat id="searchTables"
value="#{searchBean.mapKeys}"
var="mapKeys">
<p:dataTable id="recordTable"
value="#{searchBean.resultMap[mapKeys].resultList}"
var="recordTable"
paginator="true"
rows="10">
<f:facet name="header">
<h:outputText value="#{searchBean.resultMap[mapKeys].name}"/>
</f:facet>
<p:columns value="#{searchBean.resultMap[mapKeys].resultColumns}"
var="column"
columnIndexVar="colIndex">
<f:facet name="header">
<p:outputPanel>
#{column.header}
</p:outputPanel>
</f:facet>
<h:outputText value="#{recordTable[column.property]}"/><br/>
</p:columns>
</p:dataTable>
</ui:repeat>
我需要每个单独的数据表都有自己的分页器,但是当我的页面显示时,只有第一个数据表获取分页器,而这个分页器控制所有其他显示的DataTables页面。
感谢您的关注!
答案 0 :(得分:3)
这可能与JSF issue 1830有关。
您最好的选择是将ui:repeat
替换为另一个更好地执行其UINamingContainer
工作的转发器,例如<p:dataList>
或另一个<p:dataTable>
。 <p:dataList>
的列表项目符号可以通过CSS list-style-type: none
删除。
如果这也不起作用,那么它可能是PrimeFaces <p:dataTable>
本身的一个错误。
答案 1 :(得分:3)
我找到的唯一方法是使用两个p:datatable标签,父标签只有一列。我无法使用p:dataList。我猜p:dataList正在扩展相同的虚假类。
应该用这个:
<p:datatable id="searchTables"
value="#{searchBean.mapKeys}"
var="mapKeys">
<p:column>
<p:dataTable id="recordTable"
value="#{searchBean.resultMap[mapKeys].resultList}"
var="recordTable"
paginator="true"
rows="10">
<f:facet name="header">
<h:outputText value="#{searchBean.resultMap[mapKeys].name}"/>
</f:facet>
<p:columns value="#{searchBean.resultMap[mapKeys].resultColumns}"
var="column"
columnIndexVar="colIndex">
<f:facet name="header">
<p:outputPanel>
#{column.header}
</p:outputPanel>
</f:facet>
<h:outputText value="#{recordTable[column.property]}"/><br/>
</p:columns>
</p:dataTable>
</p:column>
</p:dataTable>