DataExporter не работает с фильтрами столбцов для dataTable в Primefaces - PullRequest
0 голосов
/ 25 декабря 2018

У меня есть собственный тег dataTable, который я использую во всех своих представлениях, он находится здесь: src / main / webapp / WEB-INF / tags / custom_datatable.xhtml

Моя проблема в том, еслиЯ делаю фильтрацию по одному или нескольким фильтруемым столбцам и выполняю экспорт с использованием dataExporter, фильтрация столбцов теряется, поэтому при экспорте эти дополнительные фильтрации игнорируются.Как я могу это изменить?

Это источник для пользовательского тега с данными:

<ui:composition
    xmlns="http://www.w3.org/1999/xhtml"
    xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
    xmlns:h="http://xmlns.jcp.org/jsf/html"
    xmlns:f="http://xmlns.jcp.org/jsf/core"
    xmlns:p="http://primefaces.org/ui">

    <script type="text/javascript">
        $ = jQuery;
            var scrollPos;

            function saveScrollPos() {
                        scrollPos = $(".ui-datatable-scrollable-body").scrollTop();
            }
            function getScrollPos() {
                    $(".ui-datatable-scrollable-body").scrollTop(scrollPos);
            }
    </script>

    <p:dataTable id="#{id}" value="#{value}" var="item" widgetVar="#{widgetVar}"                 
                 draggableColumns="true" filterDelay="1000"
                 styleClass="breakwords"
                 emptyMessage="#{bundle.EmptyMessage}" filteredValue="#{controller.filteredItems}"
                 selectionMode="single" selection="#{controller.selected}"
                 rowKey="#{item.id}"
                 rowStyleClass="#{rowStyleClass}"
                 sortBy="#{sortBy}" sortOrder="#{(sortOrder!=null)?sortOrder:'ascending'}"
                 scrollRows="30" scrollable="true" liveScroll="true" scrollHeight="400"
                 tableStyle="#{tableStyle}"                 
                 >
        <p:ajax event="rowSelect"   update="createButton viewButton editButton deleteButton"/>
        <p:ajax event="rowUnselect" update="createButton viewButton editButton deleteButton"/>
        <f:facet name="header">
            <p:outputPanel >
                <p:inputText id="globalFilter" style="width:150px" onkeyup="PF('#{widgetVar}').filter()" placeholder="Searching..."/>

                <h:commandLink style="float:right">
                    <p:graphicImage name="/images/csv.png" width="24"/>
                    <p:dataExporter type="csv" target="#{id}" fileName="list"/>
                </h:commandLink>

                <h:commandLink style="float:right">
                    <p:graphicImage name="/images/excel.png" width="24"/>
                    <p:dataExporter type="xls" target="#{id}" fileName="list" />
                </h:commandLink>


                <p:commandButton icon="ui-icon-refresh" oncomplete="javascript:window.location.reload();" action="#{controller.refresh}" value="Refresh" style="float:left" />
                <p:commandButton id="toggler" type="button" value="Oszlopok" style="float:left" icon="ui-icon-calculator" />
                <p:columnToggler datasource="#{id}" trigger="toggler" >
                    <p:ajax event="toggle" listener="#{controller.getControllerDelegate().onToggle}" />
                </p:columnToggler>
            </p:outputPanel>
        </f:facet>
        <ui:insert />
    </p:dataTable>
</ui:composition>

Моя версия Primefaces:

    <dependency>
        <groupId>org.primefaces</groupId>
        <artifactId>primefaces</artifactId>
        <version>6.2</version>
        <type>jar</type>
    </dependency>

1 Ответ

0 голосов
/ 05 января 2019

Экспортер PrimeFaces должен справиться с этим.Если значения вспомогательного компонента для таблицы данных помещены в @RequestScoped, это может вызвать это конкретное поведение - потерю значений фильтра при запуске экспорта.Решение состоит в том, чтобы поместить значения базового компонента для фильтрации и другие свойства таблицы в @ViewScoped.

...