Lazy Paged Container
A lazy paged container for minimal bandwidth
Perfect is you want implement yours on filters but on your server.
A complete example on the source code.
A example on Grails with Vaadin here https://bitbucket.org/aluismarte/testlazycontainervaadingrails
On Grails with Vaadin 7.4.3 has errors.
Sample code
public class DemoDomainContainer extends LazyPagedContainer<TableClass> { private static final long serialVersionUID = 3018567394091518443L; public DemoDomainContainer() { super(TableClass.class); } }
import java.util.List; import javax.servlet.annotation.WebServlet; import com.alsnightsoft.vaadin.containers.LazyQuery; import com.vaadin.annotations.Theme; import com.vaadin.annotations.VaadinServletConfiguration; import com.vaadin.data.Property; import com.vaadin.server.VaadinRequest; import com.vaadin.server.VaadinServlet; import com.vaadin.ui.CheckBox; import com.vaadin.ui.Table; import com.vaadin.ui.TextField; import com.vaadin.ui.UI; import com.vaadin.ui.VerticalLayout; @SuppressWarnings("serial") @Theme("lazypagedcontainer") public class LazypagedcontainerUI extends UI { private VerticalLayout mainLayout; private DemoDomainContainer container; private ServiceDemo service = new ServiceDemo(); private TextField tfFilterName; private CheckBox chkEnable; private Table tableDemo; @WebServlet(value = "/*", asyncSupported = true) @VaadinServletConfiguration(productionMode = false, ui = LazypagedcontainerUI.class) public static class Servlet extends VaadinServlet { } @Override protected void init(VaadinRequest request) { mainLayout = new VerticalLayout(); container = new DemoDomainContainer(); tfFilterName = new TextField("Filter"); tfFilterName.setImmediate(true); tfFilterName.addValueChangeListener(new Property.ValueChangeListener() { @Override public void valueChange(Property.ValueChangeEvent valueChangeEvent) { if (tfFilterName.getValue().equals("")) { container.setApplyLazyFilter(false); } else { container.setApplyLazyFilter(true); } tableDemo.refreshRowCache(); tableDemo.markAsDirty(); } }); chkEnable = new CheckBox("Show Disable"); chkEnable.setImmediate(true); chkEnable.setValue(false); chkEnable.addValueChangeListener(new Property.ValueChangeListener() { @Override public void valueChange(Property.ValueChangeEvent valueChangeEvent) { tableDemo.refreshRowCache(); tableDemo.markAsDirty(); } }); container.setLazyQuery(new LazyQuery<DemoDomain>() { @Override public int getLazySize() { return service.count(); } @Override public List<DemoDomain> getLazyItemsIds(int startIndex, int numberOfIds) { return service.getItemsFromTo(startIndex, numberOfIds); } @Override public int getLazyFilteredSize() { return service.countFilter(tfFilterName.getValue()); } @Override public List<DemoDomain> getLazyFilteredItemsIds(int startIndex, int numberOfIds) { return service.getFilterItemsFromTo(tfFilterName.getValue(), startIndex, numberOfIds); } }); // disable use filter query (default false) container.setApplyLazyFilter(false); tableDemo = new Table(); tableDemo.setSelectable(true); tableDemo.setImmediate(true); // tableDemo.setPageLength(5); tableDemo.setSizeFull(); tableDemo.setFooterVisible(true); tableDemo.setColumnReorderingAllowed(false); tableDemo.setColumnCollapsingAllowed(true); tableDemo.setContainerDataSource(container); tableDemo.setVisibleColumns(new Object[] { "id", "name" }); tableDemo.setColumnHeader("id", "ID"); tableDemo.setColumnHeader("name", "Name"); tableDemo.addValueChangeListener(new Property.ValueChangeListener() { @Override public void valueChange(Property.ValueChangeEvent valueChangeEvent) { System.out.println("Change Value"); } }); mainLayout.addComponent(tfFilterName); mainLayout.addComponent(chkEnable); mainLayout.addComponent(tableDemo); // When add or update data on DB use that to refresh Table // Can use filter on the table if do it when add news values to the db. // Only filter items on the view, other items need a filter query on the // LazyQuery tableDemo.refreshRowCache(); setContent(mainLayout); } }
Links
Compatibility
Was this helpful? Need more help?
Leave a comment or a question below. You can also join
the chat on Discord or
ask questions on StackOverflow.
Version
Fix to work with grid.
- Released
- 2015-04-09
- Maturity
- STABLE
- License
- Apache License 2.0
Compatibility
- Framework
- Vaadin 7.3+
- Browser
- Browser Independent
Lazy Paged Container - Vaadin Add-on Directory
A lazy paged container for minimal bandwidthLazy Paged Container version 1.0.0
Release 1.0.0
Lazy Paged Container version 1.2.0
Fixing error when the move too fast on the table.
Can change the comparator to find and filter the table.
BetterPerformance.
Lazy Paged Container version 1.3.4
Removing case on internal filters.
Fix value change no fire.
Lazy Paged Container version 2.1.1
Fix to work with grid.