我正在使用JSF 2.0标签dataTable创建一个非常简单的数据表,但由于某种原因,不会显示页面分页器。那是为什么?
<p:dataTable var="garbage" value="#{resultsController.allGarbage}" paginator="true" rows="10">
<p:column>
<f:facet name="header">
<h:outputText value="Filename" />
</f:facet>
<h:outputText value="#{garbage.filename}" />
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="Description" />
</f:facet>
<h:outputText value="#{garbage.description}" />
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="Upload date" />
</f:facet>
<h:outputText value="#{garbage.uploadDate}" />
</p:column>
</p:dataTable>
答案 0 :(得分:1)
使用p:dataTable
代替h:dataTable
。
分页仅适用于primefaces dataTable,而不适用于普通的jsf dataTable。
答案 1 :(得分:1)
paginatorAlwaysVisible
是primefaces datatable实现的一个属性,因此您必须使用primefaces命名空间中的datatable标记:p:dataTable
。
编辑:此外,您需要在页面中定义h:head
元素,以便jsf impl知道输出其他脚本和样式表的位置。如果是这种情况,您应该看到如下错误消息:
一个或多个资源的目标是“head”,但视图中没有定义“head”组件。
为了帮助您进行debuging,您可以在web.xml中添加以下上下文参数:
<context-param>
<param-name>javax.faces.PROJECT_STAGE</param-name>
<param-value>Development</param-value>
</context-param>
答案 2 :(得分:0)
@sfrj:你可能需要这样的东西:
<p:dataTable var="garbage" value="#{resultsController.allGarbage}" paginator="true" rows="10" paginatorPosition="bottom" paginatorTemplate="{FirstPageLink} {PageLinks} {LastPageLink} {RowsPerPageDropdown}" rowsPerPageTemplate="5,10,15,20" paginatorAlwaysVisible="false">
paginator="true"
只告诉你想要paginator控件的p:dataTable组件,但你还没有在中指定你想要的东西。因此,您需要paginatorTemplate
属性。如果您的查询没有返回记录,paginatorAlwaysVisible="false"
属性在美学上是很好的 - 在这种情况下,如果没有记录,则不会显示分页器部分。否则,如果从查询中返回至少一条记录,则可见。