1

私のページには次のものがあります:

                    <p:dataTable id="myTable" lazy="true" widgetVar="myTable" value=".." paginator="true" paginatorPosition="bottom" rows="10" ...>
                    <p:ajax event="page" oncomplete="myTable" />
                    ...
                    </p:dataTable>

私の豆で:

                    ...
                    private LazyDataModel list;
                    ...                     
                    public void search() {
                        list = new LazyDataModel<SomeDTO>() {
                            private static final long serialVersionUID = 1L;
                            List<SomeDTO> result = null;

                            @Override
                            public List<SomeDTO> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String, Object> filters) {                                    
                                List<SomeDTO> result = service.search(searchedName, first, pageSize);
                                // SOME CODE HERE FOR PAGINATION ?? BUT WHAT
                                return result;
                            }

                        };
                        // HOW TO DELETE THIS EXTRA REQUEST
                        list.setRowCount(service.search(searchedName));
                    }

私の質問は、結果 (サイズ + 1) から RowCount を設定する方法です。DB を要求せずに rowCount を計算できると確信しているため、DB からカウントを取得したくありません。

4

3 に答える 3

-1

はい、分かりました。ページの最初にこれが必要です:

                    <p:remoteCommand name="updateMyTable" update="#{p:component('myTable')}" process="@this" />
                    <p:dataTable id="myTable" lazy="true" widgetVar="myTable" value=".." paginator="true" paginatorPosition="bottom" rows="10" ...>
                    <p:ajax event="page" oncomplete="updateMyTable()" />
                    ...
                    </p:dataTable>

Bean で load メソッドを次のように変更します。

                            @Override
                            public List<SomeDTO> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String, Object> filters) {                                    
                                List<SomeDTO> result = service.search(searchedName, first, pageSize);
                                if (first <= pageSize) {
                                    this.setRowCount(this.getRowCount() + result.size() + 1);
                                } else if (result != null && result.size() > 0 && (result.size() >= pageSize)) {
                                    this.setRowCount(this.getRowCount() + result.size());
                                }
                                return result;
                            }
于 2016-05-12T13:34:12.740 に答える
-1

Primefaces pagination Lazy DataTable には、ページの結果を制限として返すためのクエリと、データの合計サイズを知るための別のクエリの 2 つのクエリが必要でした。

于 2016-05-12T14:17:10.703 に答える