p: datascroller только lazyload один раз - PullRequest
0 голосов
/ 06 июня 2019

Мы реализовали контроллер данных из простых лиц и расширили его с помощью lazy = true, это прекрасно работает для первой отложенной загрузки. Но когда я прокручиваю вниз, из Frontend не происходит никаких событий. Бэкэнд работает как положено.

Я проверяю это с изменением размера чанка и лучше понимаю, что происходит в бэкэнд-коде. Мы перезаписываем функцию загрузки, которую Primefaces вызывает, когда вы достигаете конца страницы. Я изменил код, чтобы не ленивым путем прокрутки, поэтому я реализую кнопку, чтобы загрузить следующий блок, когда вы нажимаете кнопку. Но кнопка исчезнет после нажатия на нее один раз.

Xhtml:

                        <p:dataScroller value="#{stakeholderOverviewController.model}" var="stakeholder" chunkSize="50" lazy="true" rowIndexVar="test">

                            <f:facet name="header">
                                Scroll Down to Load More Cars 
                            </f:facet>
                            <f:facet name="loader">
                                <p:commandButton type="button" value="More" icon="pi pi-chevron-circle-down"/>
                            </f:facet>
                            <h:panelGrid columns="2" style="width:100%" columnClasses="logo,detail">
                                <p:outputPanel>
                                    <h:panelGrid columns="2" cellpadding="5">
                                        <h:outputText value="Id:" />
                                        <h:outputText value="#{stakeholder.lastname}" style="font-weight: bold"/>

                                        <h:outputText value="Year:" />
                                        <h:outputText value="#{stakeholder.firstname}" style="font-weight: bold"/>

                                    </h:panelGrid>
                                </p:outputPanel>
                            </h:panelGrid>
                            <ui:include  rendered="#{empty stakeholder}" src="/WEB-INF/compositions/stakeholderEmptyModel.xhtml" />
                        </p:dataScroller>

есть код бэкенда для контроллера:

    public StakeholderOverviewController() {
        model = new LazyDataModel<StakeholderSearchWrapper>() {

            @Override
            public List<StakeholderSearchWrapper> load(int first, int pageSize, String sortField, SortOrder sortOrder,
                    Map filters) {

                List<StakeholderSearchWrapper> execQuery = execQuery(first, pageSize);
                return execQuery;
            }
        };
        model.setRowCount(0);
    }

....

protected synchronized List<StakeholderSearchWrapper> execQuery(int first, int pageSize) {
        if (tmpfirst != first || tmppageSize != pageSize || reExecQuery) {
            reExecQuery = false;
            tmpfirst = first;
            tmppageSize = pageSize;

            tmpModel = new LinkedList<>();

            // Query for stakeholder
            queryresponse = stakeholderService.findByLastnameOrFirstmanOwnerOrShare(getSearchText(), getClientId(),
                    first, pageSize, selectedFacets, nameSort[getSort()]);

            setFacets(queryresponse.getFacetFields());
            Set<String> stakeholderIds = new HashSet<String>();

            // convert for view
            for (SolrDocument details : queryresponse.getResults()) {
                StakeholderSearchWrapper stakeholderSearchWrapper = new StakeholderSearchWrapper(details);

                tmpModel.add(stakeholderSearchWrapper);
                stakeholderIds.add(stakeholderSearchWrapper.getId());
            }

            historyCount = stakeholderService.countHistoryEntryByStakeholders(stakeholderIds);
            notesCount = stakeholderService.countNoteEntriesByStakeholders(stakeholderIds);
            assignedProjects = projectService.findByStakeholderIds(stakeholderIds);

            for(StakeholderSearchWrapper dao : tmpModel) {
                dao.setHistoryCount(getHistoryCount(dao.getId()));
                dao.setNoteCount(getNoteEntriesCount(dao.getId()));
                dao.setProjects(getAssignedProjects(dao.getId()));
            }


            SolrDocumentList result = queryresponse.getResults();
            int numFound = (int) result.getNumFound();

            return tmpModel;
        } else {
            return tmpModel;
        }
    }

Что я хочу, так это чтобы ленивая загрузка не срабатывала только один раз. Он должен стрелять так часто, как это необходимо. Я не знаю, где я должен установить некоторую переменную, чтобы сделать это. При отладке текущего кода функция загрузки запрашивается только при первом запуске обновления страницы, после чего вызывается одна отложенная загрузка, но затем ничего не происходит.

...