{"id":1124,"date":"2012-04-10T04:00:00","date_gmt":"2012-04-10T04:00:00","guid":{"rendered":"http:\/\/www.javacodegeeks.com\/2012\/10\/lazy-jsf-primefaces-datatable-pagination-part-1.html"},"modified":"2012-10-21T23:35:45","modified_gmt":"2012-10-21T23:35:45","slug":"lazy-jsf-primefaces-datatable","status":"publish","type":"post","link":"https:\/\/www.javacodegeeks.com\/2012\/04\/lazy-jsf-primefaces-datatable.html","title":{"rendered":"Lazy JSF Primefaces Datatable Pagination &#8211; Part 1"},"content":{"rendered":"<div dir=\"ltr\" style=\"text-align: left\">Today we will do JSF datatable pagination with a Lazy List with a view scoped managed bean. What all those words\/expressions mean? <\/p>\n<p>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. <\/p>\n<p>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. <\/p>\n<p>To look like real life, our post will use JPA and HSQLDB as database, and we will use JPQL to query the data. <\/p>\n<p>In the end of this post you will find the link to download the source code. <\/p>\n<p>We will use:<\/p>\n<ul style=\"text-align: left\">\n<li>JSF 2.0 \u2013 JBoss 7 Implementation<\/li>\n<li>JBoss 7.1 \u2013 the code of this post should be applied to all servers<\/li>\n<li>Eclipse Indigo<\/li>\n<li>JPA 2.0 \u2013 JBoss 7 Implementation<\/li>\n<li>HSQLDB (2.2.8) \u2013 The HSQL it is a memory database, it will be easier to run it.<\/li>\n<li>Primefaces 3.2&nbsp;<\/li>\n<\/ul>\n<p>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. <\/p>\n<p>We will have only one entity that will be persisted, the Player class. Bellow the class code:  <\/p>\n<pre class=\"brush:java\">package com.model;\r\n\r\nimport java.io.Serializable;\r\n\r\nimport javax.persistence.Entity;\r\nimport javax.persistence.GeneratedValue;\r\nimport javax.persistence.GenerationType;\r\nimport javax.persistence.Id;\r\n\r\n@Entity\r\npublic class Player implements Serializable{\r\n\r\n    private static final long serialVersionUID = 1L;\r\n\r\n    @Id\r\n    @GeneratedValue(strategy = GenerationType.AUTO)\r\n    private int id;\r\n\r\n    private String name;\r\n    private int age;\r\n\r\n    public int getId() {\r\n        return id;\r\n    }\r\n\r\n    public void setId(int id) {\r\n        this.id = id;\r\n    }\r\n\r\n    public String getName() {\r\n        return name;\r\n    }\r\n\r\n    public void setName(String name) {\r\n        this.name = name;\r\n    }\r\n\r\n    public int getAge() {\r\n        return age;\r\n    }\r\n\r\n    public void setAge(int age) {\r\n        this.age = age;\r\n    }\r\n\r\n    @Override\r\n    public int hashCode() {\r\n        return getId();\r\n    }\r\n\r\n    @Override\r\n    public boolean equals(Object obj) {\r\n        if(obj instanceof Player){\r\n            Player player = (Player) obj;\r\n            return player.getId() == getId();\r\n        }\r\n\r\n        return false;\r\n    }\r\n}\r\n<\/pre>\n<p>We will need to create a persistence.xml file inside the \u201csrc\/META-INF\u201d folder: <\/p>\n<pre class=\"brush:xml\">&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&gt;\r\n\r\n&lt;persistence version=\"2.0\"\r\n    xmlns=\"http:\/\/java.sun.com\/xml\/ns\/persistence\" xmlns:xsi=\"http:\/\/www.w3.org\/2001\/XMLSchema-instance\"\r\n    xsi:schemaLocation=\"http:\/\/java.sun.com\/xml\/ns\/persistence http:\/\/java.sun.com\/xml\/ns\/persistence\/persistence_2_0.xsd\"&gt;\r\n\r\n    &lt;persistence-unit name=\"JSFPU\" transaction-type=\"JTA\"&gt;\r\n        &lt;jta-data-source&gt;java:\/JSFDS&lt;\/jta-data-source&gt;\r\n\r\n        &lt;properties&gt;\r\n            &lt;property name=\"hibernate.show_sql\" value=\"false\" \/&gt;\r\n            &lt;property name=\"hibernate.dialect\" value=\"org.hibernate.dialect.HSQLDialect\" \/&gt;\r\n            &lt;property name=\"hibernate.connection.shutdown\" value=\"true\" \/&gt;\r\n            &lt;property name=\"hibernate.hbm2ddl.auto\" value=\"create-drop\" \/&gt;\r\n        &lt;\/properties&gt;\r\n    &lt;\/persistence-unit&gt;\r\n&lt;\/persistence&gt;\r\n<\/pre>\n<p>To abstract the database transaction we will use a class named MyTransaction: <div style=\"display:inline-block; margin: 15px 0;\"> <div id=\"adngin-JavaCodeGeeks_incontent_video-0\" style=\"display:inline-block;\"><\/div> <\/div><\/p>\n<pre class=\"brush:java\">package com.connection;\r\n\r\nimport java.io.Serializable;\r\n\r\nimport javax.persistence.EntityManager;\r\nimport javax.transaction.HeuristicMixedException;\r\nimport javax.transaction.HeuristicRollbackException;\r\nimport javax.transaction.NotSupportedException;\r\nimport javax.transaction.RollbackException;\r\nimport javax.transaction.SystemException;\r\n\r\npublic class MyTransaction implements Serializable {\r\n\r\n    \/**\r\n     *\r\n     *\/\r\n    private static final long serialVersionUID = 1L;\r\n\r\n    private Connection connection = new Connection();   \r\n\r\n    public void begin() throws NotSupportedException, SystemException {\r\n        connection.begin();\r\n    }\r\n\r\n    public void commit() throws RollbackException, HeuristicMixedException, HeuristicRollbackException, SecurityException, IllegalStateException,\r\n            SystemException {\r\n        connection.commit();\r\n    }\r\n\r\n    public int getStatus() throws SystemException {\r\n        return connection.getStatus();\r\n    }\r\n\r\n    public void rollback() throws IllegalStateException, SecurityException, SystemException {\r\n        connection.rollback();\r\n    }\r\n\r\n    public void setRollbackOnly() throws IllegalStateException, SystemException {\r\n        connection.setRollbackOnly();\r\n    }\r\n\r\n    public void setTransactionTimeout(int timeout) throws SystemException {\r\n        connection.setTransactionTimeout(timeout);\r\n    }\r\n\r\n    public static MyTransaction getNewTransaction() {\r\n        return new MyTransaction();\r\n    }\r\n\r\n    public EntityManager getEntityManager() {\r\n        return connection.getEntityManager();\r\n    }\r\n}\r\n<\/pre>\n<p>You can see in the code above that the class is just an abstraction to the database connection; it will help us with the database queries. You could use any type of connection or you could use even a EJB to be avoiding this manually connection management. <\/p>\n<p>Check the Connection class code:  <\/p>\n<pre class=\"brush:java\">package com.connection;\r\n\r\nimport java.io.Serializable;\r\n\r\nimport javax.naming.Context;\r\nimport javax.naming.InitialContext;\r\nimport javax.persistence.EntityManager;\r\nimport javax.transaction.HeuristicMixedException;\r\nimport javax.transaction.HeuristicRollbackException;\r\nimport javax.transaction.NotSupportedException;\r\nimport javax.transaction.RollbackException;\r\nimport javax.transaction.SystemException;\r\nimport javax.transaction.UserTransaction;\r\n\r\npublic class Connection implements Serializable {\r\n\r\n    private static final long serialVersionUID = 1L;\r\n\r\n    \/**\r\n     * Get the user transaction by JNDI\r\n     *\r\n     * @return the user transaction\r\n     *\/\r\n    public UserTransaction getUserTransaction() {\r\n        UserTransaction ut = null;\r\n        try {\r\n            Context c = new InitialContext();\r\n            ut = (UserTransaction) c.lookup(\"java:comp\/UserTransaction\");\r\n        } catch (Exception e) {\r\n            e.printStackTrace();\r\n        }\r\n\r\n        return ut;\r\n    }\r\n\r\n    \/**\r\n     * Get the EntityManayger by JNDI\r\n     *\r\n     * @return the entity manager\r\n     *\/\r\n    public EntityManager getEntityManager() {\r\n        EntityManager em = null;\r\n\r\n        try {\r\n            Context initCtx = new InitialContext();\r\n            \/\/ The JSFPU must be written in the web.xml\r\n            em = (EntityManager) initCtx.lookup(\"java:comp\/env\/JSFPU\");\r\n        } catch (Exception e) {\r\n            e.printStackTrace();\r\n        }\r\n\r\n        return em;\r\n    }\r\n\r\n    public void begin() throws NotSupportedException, SystemException {\r\n        getUserTransaction().begin();\r\n    }\r\n\r\n    public void commit() throws SecurityException, IllegalStateException, RollbackException, HeuristicMixedException, HeuristicRollbackException, SystemException {\r\n        getUserTransaction().commit();\r\n    }\r\n\r\n    public int getStatus() throws SystemException {\r\n        return getUserTransaction().getStatus();\r\n    }\r\n\r\n    public void rollback() throws IllegalStateException, SecurityException, SystemException {\r\n        getUserTransaction().rollback();\r\n    }\r\n\r\n    public void setRollbackOnly() throws IllegalStateException, SystemException {\r\n        getUserTransaction().setRollbackOnly();\r\n    }\r\n\r\n    public void setTransactionTimeout(int timeout) throws SystemException {\r\n        getUserTransaction().setTransactionTimeout(timeout);\r\n    }\r\n}\r\n<\/pre>\n<p>We could use an injected UserTransaction by the JSF but we chose to use JNDI lookup. There are several Primefaces calls that are invoked outside the JSF context, you may get some NullPointerException if you try to access the references that should be injected. There are several ways to work with this issue, but we will use the JNDI Lookup to the EntityManager and to the UserTransaction. <\/p>\n<p>Our last class will be the PlayerDAO:  <\/p>\n<pre class=\"brush:java\">package com.dao;\r\n\r\nimport java.io.Serializable;\r\nimport java.util.List;\r\n\r\nimport javax.persistence.EntityManager;\r\nimport javax.persistence.Query;\r\n\r\nimport com.connection.MyTransaction;\r\nimport com.model.Player;\r\n\r\npublic class PlayerDAO implements Serializable {\r\n\r\n    private static final long serialVersionUID = 1L;\r\n    private MyTransaction myTransaction;\r\n\r\n    public PlayerDAO(MyTransaction transaction) {\r\n        this.myTransaction = transaction;\r\n    }\r\n\r\n    \/**\r\n     * Find players in the DB\r\n     *\r\n     * @param startingAt the first \"row\" db that the query will search\r\n     * @param maxPerPage the amount of records allowed per \"trip\" in the DB\r\n     * @return a players java.util.List\r\n     *\/\r\n    @SuppressWarnings(\"unchecked\")\r\n    public List&lt;Player&gt; findPlayers(int startingAt, int maxPerPage) {\r\n        EntityManager em = myTransaction.getEntityManager();\r\n\r\n        \/\/ regular query that will search for players in the db\r\n        Query query = em.createQuery(\"select p from Player p\");\r\n        query.setFirstResult(startingAt);\r\n        query.setMaxResults(maxPerPage);\r\n\r\n        return query.getResultList();\r\n    }\r\n\r\n    \/**\r\n     * Creates 100 players in the DB\r\n     *\/\r\n    public void create100Players() {\r\n        EntityManager em = myTransaction.getEntityManager();\r\n\r\n        Player player;\r\n\r\n        for (int x = 0; x &lt; 100; x++) {\r\n            player = new Player();\r\n            player.setName(\"Player: \" + x);\r\n            player.setAge(x);\r\n            em.persist(player);\r\n        }\r\n\r\n        em.flush();\r\n    }\r\n\r\n    \/**\r\n     * Sum the number of players in the DB\r\n     *\r\n     * @return an int with the total\r\n     *\/\r\n    public int countPlayersTotal() {\r\n        EntityManager em = myTransaction.getEntityManager();\r\n        Query query = em.createQuery(\"select COUNT(p) from Player p\");\r\n\r\n        Number result = (Number) query.getSingleResult();\r\n\r\n        return result.intValue();\r\n    }\r\n}\r\n<\/pre>\n<p>In the PlayerDAO class we have only 3 methods to work with our pagination. Notice that there is no method to list all the players in our database. <\/p>\n<p>Create the folder \u201cYOU_JBOSS\/modules\/org\/hsqldb\/main\u201c. Inside this folder create a file named \u201cmodule.xml\u201c. Write the code bellow inside the \u201cmodule.xml\u201d file: <\/p>\n<pre class=\"brush:xml\">&lt;module xmlns=\"urn:jboss:module:1.0\" name=\"org.hsqldb\"&gt;\r\n    &lt;resources&gt;\r\n        &lt;resource-root path=\"hsqldb.jar\" \/&gt;\r\n    &lt;\/resources&gt;\r\n    &lt;dependencies&gt;\r\n        &lt;module name=\"javax.api\" \/&gt;\r\n        &lt;module name=\"javax.transaction.api\" \/&gt;\r\n    &lt;\/dependencies&gt;\r\n&lt;\/module&gt;\r\n<\/pre>\n<p>Copy the \u201chsqldb.jar\u201d file to the folder \u201cmain\u201d that you just created. This file you will find inside the HSQLDB jar you download in the path \u201chsqldb-2.2.8.zip\/hsqldb-2.2.8\/hsqldb\/lib\u201c.  <\/p>\n<p>Edit the file \u201cYOU_JBOSS\/standalone\/configuration\/standalone.xml\u201d and add the code bellow in the \u201cdatasources\u201d node:  <\/p>\n<pre class=\"brush:xml\">&lt;datasource jndi-name=\"java:\/JSFDS\" pool-name=\"JSFDS_POOL\"\r\n    enabled=\"true\" jta=\"true\" use-java-context=\"true\" use-ccm=\"true\"&gt;\r\n    &lt;connection-url&gt;\r\n        jdbc:hsqldb:mem:jsfinmemory\r\n    &lt;\/connection-url&gt;\r\n    &lt;driver&gt;\r\n        hsqldb\r\n    &lt;\/driver&gt;\r\n    &lt;pool&gt;\r\n        &lt;prefill&gt;false&lt;\/prefill&gt;\r\n        &lt;use-strict-min&gt;false&lt;\/use-strict-min&gt;\r\n        &lt;flush-strategy&gt;FailingConnectionOnly&lt;\/flush-strategy&gt;\r\n    &lt;\/pool&gt;\r\n    &lt;security&gt;\r\n        &lt;user-name&gt;\r\n            sa\r\n        &lt;\/user-name&gt;\r\n        &lt;password&gt;\r\n        &lt;\/password&gt;\r\n    &lt;\/security&gt;\r\n&lt;\/datasource&gt;\r\n<\/pre>\n<p>In the drivers node add: <\/p>\n<pre class=\"brush:xml\">&lt;driver name=\"hsqldb\" module=\"org.hsqldb\"\/&gt;\r\n<\/pre>\n<p><strong><i>Reference: <\/i><\/strong><a href=\"http:\/\/uaihebert.com\/?p=1120\">Lazy JSF Datatable Pagination (Primefaces) <\/a> from our <a href=\"http:\/\/www.javacodegeeks.com\/p\/jcg.html\">JCG partner<\/a> Hebert Coelho at the <a href=\"http:\/\/uaihebert.com\/\">uaiHebert<\/a> blog. <\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>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, &hellip;<\/p>\n","protected":false},"author":154,"featured_media":217,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[293,453],"class_list":["post-1124","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-enterprise-java","tag-jsf","tag-primefaces"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Lazy JSF Primefaces Datatable Pagination - Part 1 - Java Code Geeks<\/title>\n<meta name=\"description\" content=\"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\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.javacodegeeks.com\/2012\/04\/lazy-jsf-primefaces-datatable.html\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Lazy JSF Primefaces Datatable Pagination - Part 1 - Java Code Geeks\" \/>\n<meta property=\"og:description\" content=\"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\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.javacodegeeks.com\/2012\/04\/lazy-jsf-primefaces-datatable.html\" \/>\n<meta property=\"og:site_name\" content=\"Java Code Geeks\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/javacodegeeks\" \/>\n<meta property=\"article:published_time\" content=\"2012-04-10T04:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2012-10-21T23:35:45+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/primefaces-logo.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"150\" \/>\n\t<meta property=\"og:image:height\" content=\"150\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Hebert Coelho\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@http:\/\/twitter.com\/uaiHebert\" \/>\n<meta name=\"twitter:site\" content=\"@javacodegeeks\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Hebert Coelho\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/04\\\/lazy-jsf-primefaces-datatable.html#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/04\\\/lazy-jsf-primefaces-datatable.html\"},\"author\":{\"name\":\"Hebert Coelho\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/person\\\/997b72fad4d637a8d56a44ea7938ddf5\"},\"headline\":\"Lazy JSF Primefaces Datatable Pagination &#8211; Part 1\",\"datePublished\":\"2012-04-10T04:00:00+00:00\",\"dateModified\":\"2012-10-21T23:35:45+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/04\\\/lazy-jsf-primefaces-datatable.html\"},\"wordCount\":514,\"commentCount\":2,\"publisher\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/04\\\/lazy-jsf-primefaces-datatable.html#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/primefaces-logo.jpg\",\"keywords\":[\"JSF\",\"PrimeFaces\"],\"articleSection\":[\"Enterprise Java\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/04\\\/lazy-jsf-primefaces-datatable.html#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/04\\\/lazy-jsf-primefaces-datatable.html\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/04\\\/lazy-jsf-primefaces-datatable.html\",\"name\":\"Lazy JSF Primefaces Datatable Pagination - Part 1 - Java Code Geeks\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/04\\\/lazy-jsf-primefaces-datatable.html#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/04\\\/lazy-jsf-primefaces-datatable.html#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/primefaces-logo.jpg\",\"datePublished\":\"2012-04-10T04:00:00+00:00\",\"dateModified\":\"2012-10-21T23:35:45+00:00\",\"description\":\"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\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/04\\\/lazy-jsf-primefaces-datatable.html#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/04\\\/lazy-jsf-primefaces-datatable.html\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/04\\\/lazy-jsf-primefaces-datatable.html#primaryimage\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/primefaces-logo.jpg\",\"contentUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/primefaces-logo.jpg\",\"width\":150,\"height\":150},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/04\\\/lazy-jsf-primefaces-datatable.html#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Java\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/category\\\/java\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Enterprise Java\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/category\\\/java\\\/enterprise-java\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Lazy JSF Primefaces Datatable Pagination &#8211; Part 1\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#website\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\",\"name\":\"Java Code Geeks\",\"description\":\"Java Developers Resource Center\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\"},\"alternateName\":\"JCG\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.javacodegeeks.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\",\"name\":\"Exelixis Media P.C.\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2022\\\/06\\\/exelixis-logo.png\",\"contentUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2022\\\/06\\\/exelixis-logo.png\",\"width\":864,\"height\":246,\"caption\":\"Exelixis Media P.C.\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/javacodegeeks\",\"https:\\\/\\\/x.com\\\/javacodegeeks\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/person\\\/997b72fad4d637a8d56a44ea7938ddf5\",\"name\":\"Hebert Coelho\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/afcc9fe43ded824615eb04ed102590ff0c8601a47624b2a681103f05da1bddfb?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/afcc9fe43ded824615eb04ed102590ff0c8601a47624b2a681103f05da1bddfb?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/afcc9fe43ded824615eb04ed102590ff0c8601a47624b2a681103f05da1bddfb?s=96&d=mm&r=g\",\"caption\":\"Hebert Coelho\"},\"description\":\"Senior Java Development, with 4 certifications and a published book about JSF (portuguese only). Founder of the blog uaiHebert.com visited from more than 170 different countries.\",\"sameAs\":[\"http:\\\/\\\/uaihebert.com\\\/\",\"http:\\\/\\\/www.linkedin.com\\\/pub\\\/h%C3%A9bert-coelho-de-oliveira\\\/46\\\/ba8\\\/5bb\",\"https:\\\/\\\/x.com\\\/http:\\\/\\\/twitter.com\\\/uaiHebert\"],\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/author\\\/Hebert-Coelho\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Lazy JSF Primefaces Datatable Pagination - Part 1 - Java Code Geeks","description":"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","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.javacodegeeks.com\/2012\/04\/lazy-jsf-primefaces-datatable.html","og_locale":"en_US","og_type":"article","og_title":"Lazy JSF Primefaces Datatable Pagination - Part 1 - Java Code Geeks","og_description":"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","og_url":"https:\/\/www.javacodegeeks.com\/2012\/04\/lazy-jsf-primefaces-datatable.html","og_site_name":"Java Code Geeks","article_publisher":"https:\/\/www.facebook.com\/javacodegeeks","article_published_time":"2012-04-10T04:00:00+00:00","article_modified_time":"2012-10-21T23:35:45+00:00","og_image":[{"width":150,"height":150,"url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/primefaces-logo.jpg","type":"image\/jpeg"}],"author":"Hebert Coelho","twitter_card":"summary_large_image","twitter_creator":"@http:\/\/twitter.com\/uaiHebert","twitter_site":"@javacodegeeks","twitter_misc":{"Written by":"Hebert Coelho","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.javacodegeeks.com\/2012\/04\/lazy-jsf-primefaces-datatable.html#article","isPartOf":{"@id":"https:\/\/www.javacodegeeks.com\/2012\/04\/lazy-jsf-primefaces-datatable.html"},"author":{"name":"Hebert Coelho","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/person\/997b72fad4d637a8d56a44ea7938ddf5"},"headline":"Lazy JSF Primefaces Datatable Pagination &#8211; Part 1","datePublished":"2012-04-10T04:00:00+00:00","dateModified":"2012-10-21T23:35:45+00:00","mainEntityOfPage":{"@id":"https:\/\/www.javacodegeeks.com\/2012\/04\/lazy-jsf-primefaces-datatable.html"},"wordCount":514,"commentCount":2,"publisher":{"@id":"https:\/\/www.javacodegeeks.com\/#organization"},"image":{"@id":"https:\/\/www.javacodegeeks.com\/2012\/04\/lazy-jsf-primefaces-datatable.html#primaryimage"},"thumbnailUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/primefaces-logo.jpg","keywords":["JSF","PrimeFaces"],"articleSection":["Enterprise Java"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.javacodegeeks.com\/2012\/04\/lazy-jsf-primefaces-datatable.html#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.javacodegeeks.com\/2012\/04\/lazy-jsf-primefaces-datatable.html","url":"https:\/\/www.javacodegeeks.com\/2012\/04\/lazy-jsf-primefaces-datatable.html","name":"Lazy JSF Primefaces Datatable Pagination - Part 1 - Java Code Geeks","isPartOf":{"@id":"https:\/\/www.javacodegeeks.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.javacodegeeks.com\/2012\/04\/lazy-jsf-primefaces-datatable.html#primaryimage"},"image":{"@id":"https:\/\/www.javacodegeeks.com\/2012\/04\/lazy-jsf-primefaces-datatable.html#primaryimage"},"thumbnailUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/primefaces-logo.jpg","datePublished":"2012-04-10T04:00:00+00:00","dateModified":"2012-10-21T23:35:45+00:00","description":"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","breadcrumb":{"@id":"https:\/\/www.javacodegeeks.com\/2012\/04\/lazy-jsf-primefaces-datatable.html#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.javacodegeeks.com\/2012\/04\/lazy-jsf-primefaces-datatable.html"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.javacodegeeks.com\/2012\/04\/lazy-jsf-primefaces-datatable.html#primaryimage","url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/primefaces-logo.jpg","contentUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/primefaces-logo.jpg","width":150,"height":150},{"@type":"BreadcrumbList","@id":"https:\/\/www.javacodegeeks.com\/2012\/04\/lazy-jsf-primefaces-datatable.html#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.javacodegeeks.com\/"},{"@type":"ListItem","position":2,"name":"Java","item":"https:\/\/www.javacodegeeks.com\/category\/java"},{"@type":"ListItem","position":3,"name":"Enterprise Java","item":"https:\/\/www.javacodegeeks.com\/category\/java\/enterprise-java"},{"@type":"ListItem","position":4,"name":"Lazy JSF Primefaces Datatable Pagination &#8211; Part 1"}]},{"@type":"WebSite","@id":"https:\/\/www.javacodegeeks.com\/#website","url":"https:\/\/www.javacodegeeks.com\/","name":"Java Code Geeks","description":"Java Developers Resource Center","publisher":{"@id":"https:\/\/www.javacodegeeks.com\/#organization"},"alternateName":"JCG","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.javacodegeeks.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.javacodegeeks.com\/#organization","name":"Exelixis Media P.C.","url":"https:\/\/www.javacodegeeks.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/logo\/image\/","url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","contentUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","width":864,"height":246,"caption":"Exelixis Media P.C."},"image":{"@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/javacodegeeks","https:\/\/x.com\/javacodegeeks"]},{"@type":"Person","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/person\/997b72fad4d637a8d56a44ea7938ddf5","name":"Hebert Coelho","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/afcc9fe43ded824615eb04ed102590ff0c8601a47624b2a681103f05da1bddfb?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/afcc9fe43ded824615eb04ed102590ff0c8601a47624b2a681103f05da1bddfb?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/afcc9fe43ded824615eb04ed102590ff0c8601a47624b2a681103f05da1bddfb?s=96&d=mm&r=g","caption":"Hebert Coelho"},"description":"Senior Java Development, with 4 certifications and a published book about JSF (portuguese only). Founder of the blog uaiHebert.com visited from more than 170 different countries.","sameAs":["http:\/\/uaihebert.com\/","http:\/\/www.linkedin.com\/pub\/h%C3%A9bert-coelho-de-oliveira\/46\/ba8\/5bb","https:\/\/x.com\/http:\/\/twitter.com\/uaiHebert"],"url":"https:\/\/www.javacodegeeks.com\/author\/Hebert-Coelho"}]}},"_links":{"self":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts\/1124","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/users\/154"}],"replies":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/comments?post=1124"}],"version-history":[{"count":0,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts\/1124\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/media\/217"}],"wp:attachment":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/media?parent=1124"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/categories?post=1124"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/tags?post=1124"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}