Lazy JSF Datatable Pagination (Primefaces)


Posted on March 30, 2012 by

Share it now!

Hello, how are you?

Today we will do JSF datatable pagination with a Lazy List with a view scoped managed bean. What all those words/expressions mean?

There are several JSF frameworks today that provide datatables with a ready pagination, columns sorter and others functionalities. Today we will use the Primefaces datatable.

Usually the datatables will put the displayed List, with the entities, inside the user http session. Increasing the objects inside the user session will have a direct impact on the server performance; each user that displays a datatable,  that keeps a list in the session, will be allocating more and more memory in the server.

To look like real life, our post will use JPA and HSQLDB as database, and we will use JPQL to query the data.

In the end of this post you will find the link to download the source code.

We will use:

  • JSF 2.0 – JBoss 7 Implementation
  • JBoss 7.1 – the code of this post should be applied to all servers
  • Eclipse Indigo
  • JPA 2.0 – JBoss 7 Implementation
  • HSQLDB (2.2.8) – The HSQL it is a memory database, it will be easier to run it.
  • Primefaces 3.2

This post is not about good development practices nor about adding classes layers of project modeling. I just intend to show how to do a pagination without a session managed bean.

Response to Lazy JSF Datatable Pagination (Primefaces)

  1. Pravin

    How can I get current page list of data table. Means If I am on page 2 having 3 rows then how can I get this list of three object in managed bean???? trying from last 3 days. Please help.

    • uaihebert Post author

      Hello Pravin, how are you?

      If you list points to ${managedBean.yourList} than yourList alread has the 3 rows. Use the same managedBean.

      Thanks for passing by.

    • uaihebert Post author

      Hello ij.

      First of all, I am really sorry for taking so long in my answer. I am working more than 10h per day in this last month, all days. =(

      I cannot tell you for sure, because I do not know how that Primefaces is implemented in the new version.

      I believe that you could ask in the Primefaces forum

      Thanks for passing by

  2. ollaollu

    Been having problems understanding Primefaces and your blog worked like magic, now I get it way way better but I do not know how to implement the sort part and filter part of Primefaces and you did not do that here. Any pointer? or maybe update or maybe where I can look?

    Thank you

  3. Eurimar Pontes

    I got the error:

    Out 05, 2014 7:20:48 PM com.sun.faces.renderkit.ClientSideStateHelper doGetState
    GRAVE: Not in GZIP format Not in GZIP format
    at Source)
    at Source)
    at Source)
    at com.sun.faces.renderkit.ClientSideStateHelper.doGetState(
    at com.sun.faces.renderkit.ClientSideStateHelper.getState(
    at com.sun.faces.renderkit.ResponseStateManagerImpl.getState(
    at com.sun.faces.application.view.StateManagementStrategyImpl.restoreView(
    at com.sun.faces.application.StateManagerImpl.restoreView(
    at com.sun.faces.application.view.ViewHandlingStrategy.restoreView(
    at com.sun.faces.application.view.FaceletViewHandlingStrategy.restoreView(
    at com.sun.faces.application.view.MultiViewHandler.restoreView(
    at javax.faces.application.ViewHandlerWrapper.restoreView(
    at com.sun.faces.lifecycle.RestoreViewPhase.execute(
    at com.sun.faces.lifecycle.Phase.doPhase(
    at com.sun.faces.lifecycle.RestoreViewPhase.doPhase(
    at com.sun.faces.lifecycle.LifecycleImpl.execute(
    at javax.faces.webapp.FacesServlet.service(
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(
    at org.apache.catalina.core.StandardWrapperValve.invoke(
    at org.apache.catalina.core.StandardContextValve.invoke(
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(
    at org.apache.catalina.core.StandardHostValve.invoke(
    at org.apache.catalina.valves.ErrorReportValve.invoke(
    at org.apache.catalina.valves.AccessLogValve.invoke(
    at org.apache.catalina.core.StandardEngineValve.invoke(
    at org.apache.catalina.connector.CoyoteAdapter.service(
    at org.apache.coyote.http11.AbstractHttp11Processor.process(
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$ Source)
    at org.apache.tomcat.util.threads.TaskThread$
    at Source)

  4. Pingback: primefaces-lazy-loading-datatable-for-jsf2/ | mauroprogram's Blog

  5. Max

    Hello, very nice tutorial, I’m following your web as I’m starting with JavaEE.

    I’d like to ask you about the xhtml page, in the datatable properties, the only way I can retrieve any values is by using the ” lazy = “true” ” property, but you don’t use that in your code. Do you know why? am I forgetting something?

    Thanks in advance and congratulations for your good posts ;)

    • uaihebert Post author

      Hello Max,

      The lazy is mandatory for newer primefaces versions. When I created this post it was not necessary to use the attribute lazy.

      Thanks for passing by.

Leave a Reply

Your email address will not be published. Required fields are marked *


You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Current day month ye@r *