2011-03-28 101 views
0

我使用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> 

回答

1

使用p:dataTable而不是h:dataTable

分页仅适用于primefaces数据表,不适用于普通的jsf dataTable。

+0

我明白了。你可以在代码中看到我正在使用的primefaces paginator,但它没有被显示。我不明白为什么? – sfrj 2011-03-28 10:01:20

+0

你的数据是否显示?它显示为一页还是全部在一页上?你的代码看起来是正确的(我以同样的方式使用它)。 – 2011-03-28 10:05:01

+0

如果我删除rows =“10”,它会显示所有数据,但是如果我离开它,它只会显示10.数据正确显示正确,但出于某种奇怪的原因,我没有看到paginator。 – sfrj 2011-03-28 10:07:58

1

paginatorAlwaysVisible是primefaces数据表实施的一个属性,因此您必须使用primefaces命名空间中的数据表标记:p:dataTable

编辑:此外,您需要在页面中定义一个h:head元素,以便jsf impl知道在哪里输出其他脚本和样式表。如果是这种情况,您应该看到如下错误消息:

一个或多个资源的目标是'head',但在视图内没有定义'head'组件。

为了帮助调试运行你可以在以下方面参数添加到你的web.xml:

<context-param> 
    <param-name>javax.faces.PROJECT_STAGE</param-name> 
    <param-value>Development</param-value> 
</context-param> 
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"只告诉p:你希望paginator控件的dataTable组件,但是你还没有指定你想要的。因此,您需要paginatorTemplate属性。如果您的查询没有返回记录,则paginatorAlwaysVisible="false"属性在美学上非常好 - 在这种情况下,如果没有记录,则不会显示paginator部分。否则,如果查询返回至少一条记录,则可见。