package com.vaadin.tests.components.table; import java.io.Serializable; import java.util.List; import com.vaadin.server.VaadinRequest; import com.vaadin.tests.components.AbstractTestUIWithLog; import com.vaadin.ui.Button; import com.vaadin.v7.data.util.BeanContainer; import com.vaadin.v7.ui.Table; @SuppressWarnings("serial") public class TableCacheMinimizingOnFetchRows extends AbstractTestUIWithLog { @Override protected void setup(VaadinRequest request) { getLayout().setMargin(true); final Table table = new Table("Beans of All Sorts"); BeanContainer beans = new BeanContainer( Bean.class) { @Override public List getItemIds(int startIndex, int numberOfIds) { // numberOfIds should be about 60 after scrolling down the table log.log("requested " + numberOfIds + " rows"); return super.getItemIds(startIndex, numberOfIds); } }; beans.setBeanIdProperty("name"); for (int i = 0; i < 10000; i++) { beans.addBean(new Bean("Common bean" + i, i)); } table.setContainerDataSource(beans); table.setPageLength(20); table.setVisibleColumns("name", "value"); table.setWidth("800px"); Button button = new Button("scroll down"); button.addClickListener( event -> table.setCurrentPageFirstItemIndex(table.size())); addComponent(table); addComponent(button); } public class Bean implements Serializable { String name; int value; public Bean(String name, int value) { this.name = name; this.value = value; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getValue() { return value; } public void setValue(int value) { this.value = value; } } @Override protected String getTestDescription() { return "Ensure that when scrolling from top to bottom in a big table with 10000 items, not all rows in the range are cached"; } @Override protected Integer getTicketNumber() { return 13576; } }