p: datatable lazy pagination: после нажатия на пейджинг "first" становится равным размеру страницы - PullRequest
0 голосов
/ 30 сентября 2019

Мой компонент JSF с ленивой моделью данных

private Integer pageSize = 15;

private Integer first = 0;


@PostConstruct
public void init() {
    responseDataList = new ResponseDataList();
    responseDataList.setPageSize(pageSize);      
}

public class ResponseDataList extends LazyDataModel<User> {

    public int total = 0;
    public int dataSize = 0;

    @Override
    public List<User> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String, Object> filters) {
        List<User> data = new ArrayList<>();
        try {


            total = userRestClient.getTotalCount().intValue();


            int count = (first + pageSize);
           data = userRestClient.findAllUsers(first, count).getUserList();

            dataSize = data.size();


        } catch (Exception es) {

        }
        return data;
    }

    @Override
    public User getRowData(String rowKey) {
        return null;
    }

    @Override
    public Object getRowKey(User object) {
        return object.getId();
    }

    @Override
    public int getRowCount() {
        return (int) total;
    }
}

Моя таблица данных:

        <p:dataTable var="list" id="userTbl"
                             value="#{usersBean.responseDataList}"
                             paginator="true" rows="#{usersBean.pageSize}" first="#{usersBean.first}"  reflow="true" 
                             paginatorTemplate="{RowsPerPageDropdown} {FirstPageLink} 
                             {PreviousPageLink} {CurrentPageReport} {NextPageLink} {LastPageLink}" 
                             lazy="true"  rowsPerPageTemplate="5,10,15"
                             >                                    

Когда я нажимаю на нумерацию страниц первый раз, «первый» равен нулю, второй раз равен 15. Почему происходит сбой подкачки. общее количество данных в базе данных.

Я не понимаю, как растет "первым" и где моя ошибка?

1 Ответ

0 голосов
/ 30 сентября 2019

После прочтения JSF Primefaces Pagination с Backend я обнаружил, что PrimeFaces пропускает номер первой записи, в то время как я подозревал, что это страница для запуска, на которой и используется наш сервис. Поэтому сначала разделив PrimeFaces по размеру страницы и передав результат нашему методу, как показано в приведенном ниже коде, он заработал.

if (first == 0) {
    data = userRestClient.findAllUsers(first, pageSize).getUserList();
} else {
    first = first / pageSize;
    data = userRestClient.findAllUsers(first, pageSize).getUserList();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...