Mehmet Ethem SULAN :: JSF(Java Server Faces) PrimeFaces :: JSF PrimeFaces Datatable Pagination Example

JSF ile PrimeFaces kullanrak client tarafında kayıtları sayfalamaya çalıştım. PrimeFaces Hibernate NetBeans örneğine bakabilirsiniz.
Sayfalama aslında o kadar da kolay bir işlem değil. Ama PrimeFaces veya RichFaces ile bu işlem kolaşlaşıyor. Jquery ile yapılmış pagination örneğine bakmakta fayda var.
PrimeFaces IDE’ye nasıl eklendiğine bakalım.
Aslında bu sayfalama özelliğine bir de arama özelliği eklense daha güzel olur. Yani bütün kayıtların içinde istediğimizi arayabileceğimiz bir özellikte olsa daha iyi olur.
1.Aşağıdaki resimde görüldüğü gibi web-fragment.xml içinde servlet ve servlet mapping tanımlamaları yapılmış.
2.PrimeFaces2.1 kütüphanesi eklenmiş.
3.Her .xhtml sayfasının başına otomatik xmlns:p=”http://primefaces.prime.com.tr/ui” ekleniyor.

Yukardaki resimde JSF 2.0 kütüphanesi de eklenildiğine dikkat edin. Yani JavaServer Faces frameworkun içinde PrimeFaces kullanılıyor. O da JSF tagları gibi kullanılıyor ama daha güçlü ve pratik taglardan oluşuyorlar.
Ilk çalıştırıldığında rows=”2″ seçtiğimden 2 kayıt şeklinde sayfalıyor. rowsPerPageTemplate=”3,10,30,100″ ile de 3,10,30 .. şeklinde listeleyebiliriz. Mesela 3 yazılan yerde 10 seçsek sayfalar onar onar olarak listeleniyor.

index.xhtml

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:p="http://primefaces.prime.com.tr/ui"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core">
    <h:head>
        <title>Facelet Title</title>
    </h:head>
    <h:body>
        <h:form>
            <p:panel header="PrimeFaces ile listeleme">
                <p:dataTable value="#{bean.item}" var="items" paginator="true" 
                             rows="2" rowsPerPageTemplate="3,10,30,100" 
                             paginatorTemplate="{FirstPageLink}{PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}">
                    <p:column>
                        <f:facet name="header">Ad</f:facet>
                        <h:outputText value="#{items.ad}"/>
                    </p:column>
                    <p:column>
                        <f:facet name="header">Soyad</f:facet>
                        <h:outputText value="#{items.soyad}"/>
                    </p:column>
                    <p:column>
                        <f:facet name="header">Yas</f:facet>
                        <h:outputText value="#{items.yas}"/>
                    </p:column>
                </p:dataTable>
            </p:panel>
        </h:form>
    </h:body>
</html>

Kisi.java

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ethem;

/**
 *
 * @author ubuntu
 */
public class Kisi {

    private int yas;
    private String ad;
    private String soyad;

    public Kisi() {
    }

    public Kisi(String ad, String soyad, int yas) {
        this.ad = ad;
        this.soyad = soyad;
        this.yas = yas;
    }

    public String getAd() {
        return ad;
    }

    public void setAd(String ad) {
        this.ad = ad;
    }

    public String getSoyad() {
        return soyad;
    }

    public void setSoyad(String soyad) {
        this.soyad = soyad;
    }

    public int getYas() {
        return yas;
    }

    public void setYas(int yas) {
        this.yas = yas;
    }
}

JSF 2.0 Managed Bean Ajax örneğine bakabilirsiniz.
Bean.java

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package ethem;

import java.util.ArrayList;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;

/**
 *
 * @author ubuntu
 */
//jsf 2.0 ile jsf managed bean oldugunu bu sekilde tanimlayabiliyoruz(@ ile yapilan tanimlamalar).
@ManagedBean
@RequestScoped
public class Bean {

    /** Creates a new instance of Bean */
    private List<Kisi> item;

    public List<Kisi> getItem() {
        return item;
    }

    public void setItem(List<Kisi> item) {
        this.item = item;
    }
    public Bean() {
        item=new ArrayList<Kisi>();
        item.add(new Kisi("Down", "BROWN", 40));
        item.add(new Kisi("Yasemin", "YILDIZ", 22));
        item.add(new Kisi("Ozlem", "BAYRAM", 25));
        item.add(new Kisi("Kenan", "GELDIK", 23));
        
    }

}

we-fragment.xml

<web-fragment xmlns="http://java.sun.com/xml/ns/javaee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-fragment_3_0.xsd"
	version="3.0">

	<name>PrimeFaces</name>
	
    <servlet>
		<servlet-name>PrimeFaces Resource Servlet</servlet-name>
		<servlet-class>org.primefaces.resource.ResourceServlet</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>PrimeFaces Resource Servlet</servlet-name>
		<url-pattern>/primefaces_resource/*</url-pattern>
	</servlet-mapping>
	
</web-fragment>

Comments

There are 2 comments for this post.

  1. HAKAN ASLIM on Ağustos 3, 2011 7:59 am

    Merhaba ,

    *.xhtml sayfamda kullandığımda aşağıdaki hatayı alıyorum. Yardımını rica ediyorum.

    ************** Sayfam *******************

    ************** HATA *******************
    java.lang.NullPointerException
    org.springframework.faces.webflow.FlowViewStateManager.saveView(FlowViewStateManager.java:181)
    com.sun.faces.application.view.WriteBehindStateWriter.flushToWriter(WriteBehindStateWriter.java:221)
    com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:406)
    com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:127)
    org.springframework.faces.webflow.FlowViewHandler.renderView(FlowViewHandler.java:99)
    com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:117)
    com.sun.faces.lifecycle.Phase.doPhase(Phase.java:97)
    com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:135)
    javax.faces.webapp.FacesServlet.service(FacesServlet.java:309)
    org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:238)
    org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:250)
    org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1047)
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:817)
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719)
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644)
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:549)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    org.tuckey.web.filters.urlrewrite.NormalRewrittenUrl.doRewrite(NormalRewrittenUrl.java:195)
    org.tuckey.web.filters.urlrewrite.RuleChain.handleRewrite(RuleChain.java:159)
    org.tuckey.web.filters.urlrewrite.RuleChain.doRules(RuleChain.java:141)
    org.tuckey.web.filters.urlrewrite.UrlRewriter.processRequest(UrlRewriter.java:90)
    org.tuckey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(UrlRewriteFilter.java:417)

  2. ufuk on Mayıs 18, 2012 8:44 am

    Merhaba,
    Netbeans’de yaptıgım jsf projesini hosta aktarmak istedim.Host şirketi desteklerinin oldugunu soylediler.Bende jsf klasoru yaratıp netbeans projesini içine koydum.Ancak bende local deki gibi çalısmadı.Ben mi yanlıs yapıyorum.

Write a Comment

Let me know what you think?