在PrimeFaces中的DataTable-Paginator-Dropdown中显示“全部显示”选项

时间:2017-02-13 12:59:19

标签: primefaces jsf-2 pagination

我有Java程序,我使用Primefaces分页和延迟加载。 我想在rowsPerPageTemplate中添加“Show All”。

<p:dataTable var="info"
                    value="#{infoMB.lazyModel}"
                    id="infoTable"
                    width="100%"
                    liveResize="true"
                    paginator="true"
                    rows="50"
                    paginatorTemplate="{RowsPerPageDropdown} {FirstPageLink} {PreviousPageLink} {CurrentPageReport} {NextPageLink} {LastPageLink}"
                    rowsPerPageTemplate="50,100,"Show all" rowsPerPageAllEntry="true"
                    lazy="true">

3 个答案:

答案 0 :(得分:0)

似乎适合我。在rowsPerPageTemplate 999999999中填写最后一个选项。

    <script>
        function updateShowAll() {
            $('.ui-paginator-rpp-options').children().each(function() {if ($(this).text() === '999999999'){$(this).text('Show all')}});
        }
        updateShowAll();
        $(document).on('pfAjaxComplete', updateShowAll);
    </script>

事件处理程序是为了避免在update数据表后手动调用js-function。

似乎这将通过使用&#34; *&#34;。

在PF 6.1中内置

答案 1 :(得分:0)

我同意@Jaqen H'ghar在评论部分的声明,这是我所见过的最神秘的答案。我在这里发布解决方案,以防其他人对此寻求解决方案。

我正在使用 Primefaces-7.0 ,并查看了org/primefaces/component/paginator/RowsPerPageDropDownRenderer.class的代码,并找到了以下代码:

if (option.trim().startsWith("{ShowAll|")) {
    optionText = option.substring(option.indexOf("'") + 1, option.lastIndexOf("'"));
    rows = pageable.getRowCount();
  } else {
    optionText = option.trim();
    rows = Integer.parseInt(optionText);
  }

因此,为了使示例正常工作,您应该添加{ShowAll|'Show All',这将在下拉选择器中添加** Show All **选项,该选项将在一页中显示列表的所有行。 / p>

Primefaces-7.0示例{ShowAll|'Show All'

<p:dataTable var="info"
                value="#{infoMB.lazyModel}"
                id="infoTable"
                width="100%"
                liveResize="true"
                paginator="true"
                rows="50"
                paginatorTemplate="{RowsPerPageDropdown} {FirstPageLink} {PreviousPageLink} {CurrentPageReport} {NextPageLink} {LastPageLink}"
                rowsPerPageTemplate="50,100,{ShowAll|'Show All' " rowsPerPageAllEntry="true"
                lazy="true">

Primefaces 6.2示例*All rows

<p:dataTable var="info"
            value="#{infoMB.lazyModel}"
            id="infoTable"
            width="100%"
            liveResize="true"
            paginator="true"
            rows="50"
            paginatorTemplate="{RowsPerPageDropdown} {FirstPageLink} {PreviousPageLink} {CurrentPageReport} {NextPageLink} {LastPageLink}"
            rowsPerPageTemplate="50,100,*" rowsPerPageAllEntry="true"
            lazy="true">

答案 2 :(得分:-1)

要使commandButton出现在dataTable中,请执行以下示例:

<p:dataTable ... >

   <f:facet name="header" > <p:commandButton value="Validate button" action="#{managedBean.method()}" > </p:commandButton> </f:facet>

 </p:dataTable ... >

您甚至可以将其显示在dataTable的底部,如下所示

 <p:dataTable ... >

   <f:facet name="footer" > <p:commandButton value="Validate button" action="#{managedBean.method()}" > </p:commandButton> </f:facet>

 </p:dataTable ... >

希望能帮到你。