Question

I am new in GWT. I am trying to use the cell table to do this. Here is my questions:

Name Gender

Ali          M
Abu       M
Siti         F

page 1

Name Gender

Siti            F
Noor         F
Ahmad     F

page 2

I use simple pager to do the paging function. Everything is ok except next page. When i click next page, siti record appear 2 times. How to prevent the name Siti not appear in page 2? Below are my code:

private static class Contact{
    private final String name;
    private final String gender;

    public Contact(String name, String gender){
        this.name = name;
        this.gender = gender;
    }
}

private static final List<Contact> CONTACTS = Arrays.asList(
        new Contact("Ali","M"),
        new Contact("Abu","M"),
        new Contact("Siti","F"),
        new Contact("Noor","F"),
        new Contact("Ahmad","M")
);

public void onModuleLoad(){
    final CellTable<Contact> table = new CellTable<Contact>();
    table.setPageSize(3);

    TextColumn<Contact> nameColumn = new TextColumn<Contact>(){
        @Override
        public String getValue(Contact object) {
            return object.name;
        }
    };

    TextColumn<Contact> genderColumn = new TextColumn<Contact>(){
        @Override
        public String getValue(Contact object) {
            return object.gender;
        }
    };

    table.addColumn(nameColumn, "Name");
    table.addColumn(genderColumn, "Gender");

    AsyncDataProvider<Contact> provider = new AsyncDataProvider<Contact>(){

        @Override
        protected void onRangeChanged(HasData<Contact> display) {
            int start = display.getVisibleRange().getStart();
            int end = start + display.getVisibleRange().getLength();
            end = end >= CONTACTS.size() ? CONTACTS.size() : end;
            List<Contact> sub = CONTACTS.subList(start,end);
            updateRowData(start,sub);
        } 
    };
    provider.addDataDisplay(table);
    provider.updateRowCount(CONTACTS.size(), true);

     SimplePager.Resources pagerResources = GWT.create(SimplePager.Resources.class);
    SimplePager pager = new SimplePager(TextLocation.CENTER, pagerResources, false, 0, true);
    pager.setDisplay(table);

Please help me to solve this problem. Thanks.

Was it helpful?

Solution

You have faced most probably the gwt last page problem, described in the linked questions:

GWT - celltable with simple pager issue
SimplePager row count is working incorrectly

The solution here is to set:

setRangeLimited(false)

and the last page is paged correctly, ie. it contains only Noor and Ahmad.

So in conclusion: actually no duplication is present here, but a bug on pagination in case of the last page. You will observe the same behavior with also other amounts of data, but on my view point it would be always a last page issue only.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top