Archive for the ‘ PrimeFaces ’ Category

Mac ile PrimeFaces ve Eclipse Indigo ayarlarını yapmaya çalıştım.

1.PrimeFaces.jar dosyasını WEB-INF –> lib altına atıp sağ tıklayıp Add to build path demeniz lazım.
2. web.xml içinde ne varsa silin ve aşağıdakini yapıştırın.

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
  <display-name>Primefaces</display-name>
  <servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.jsf</url-pattern>
  </servlet-mapping>
 <context-param>
  <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
  <param-value>server</param-value>
 </context-param>
 <context-param>
  <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
  <param-value>.xhtml</param-value>
 </context-param>
 <context-param>
  <param-name>com.sun.faces.expressionFactory</param-name>
  <param-value>com.sun.el.ExpressionFactoryImpl</param-value>
 </context-param>
 <context-param>
  <param-name>javax.faces.PROJECT_STAGE</param-name>
  <param-value>Development</param-value>
 </context-param>
 <context-param>
  <param-name>javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL</param-name>
  <param-value>true</param-value>
 </context-param>
</web-app>

3. PrimeFaces kullanabilmek için

xmlns:p="http://primefaces.org/ui"

satırı aşağıdaki gibi eklemeniz lazım.

<html xmlns="http://www.w3.org/1999/xhtml"
	xmlns:ui="http://java.sun.com/jsf/facelets"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:f="http://java.sun.com/jsf/core"
	xmlns:p="http://primefaces.org/ui">

4.Ben index.jsp sayfasını sildim ve projeyi index.xhtml sayfasını sağ tıklayıp Debug As –> Debug on server seçeneğini tıklamanız yeterlidir.
Birinci formda “ajax ile inputu yaz” buttonuna tıklandığında ajax ile girilen değerleri h:outputLabel e yazıyor.
Ikinci formda ise girilen değerleri hello.xhtml sayfasında gösteriyor.


index.xhtml

<!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:ui="http://java.sun.com/jsf/facelets"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:f="http://java.sun.com/jsf/core"
	xmlns:p="http://primefaces.org/ui">

<h:head>
	<title>Title</title>
</h:head>
<h:body>

<h1>Form 1</h1>
	<h:form>
		<p:panel>
			<h:panelGrid columns="2">
				<h:inputText value="#{test.name}"></h:inputText>
				<h:outputLabel id="lblName" value="#{test.name}"></h:outputLabel>
				
				<h:inputText value="#{test.address}"></h:inputText>
				<h:outputLabel id="lblAddress" value="#{test.address}"></h:outputLabel>
		
				<p:commandButton value="Ajax Ile Inputları Yaz" update="lblName,lblAddress"/>
			</h:panelGrid>
		</p:panel>
	</h:form>
<h1>Form 2</h1>
	<h:form>
		<p:panel>
			<h:panelGrid columns="1">
					<h:inputText value="#{test.name}"></h:inputText>
					<h:inputText value="#{test.address}"></h:inputText>
					<h:commandButton action="#{test.getPageName()}" value="Open Hello Page"></h:commandButton>
			</h:panelGrid>
		</p:panel>
	</h:form>
</h:body>
</html>

hello.xhtml

<!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:ui="http://java.sun.com/jsf/facelets"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:f="http://java.sun.com/jsf/core">

<h:head>
	<title>Hello Page</title>
</h:head>

<h:body>
	<h:form>
		<h:outputLabel value="#{test.name}"></h:outputLabel><br/>
		<h:outputLabel value="#{test.address}"></h:outputLabel>
	</h:form>

</h:body>
</html>

Test.java

package com.test;

public class Test {
	
	private String name;
	private String address;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
	

	public String getPageName(){
		return "hello";
	}
}

faces-config.xml

<?xml version="1.0" encoding="UTF-8"?>

<faces-config
    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-facesconfig_2_0.xsd"
    version="2.0">
	<managed-bean>
		<managed-bean-name>test</managed-bean-name>
		<managed-bean-class>com.test.Test</managed-bean-class>
		<managed-bean-scope>request</managed-bean-scope>
	</managed-bean>
	<navigation-rule>
		<display-name>index.xhtml</display-name>
		<from-view-id>/index.xhtml</from-view-id>
		<navigation-case>
			<from-outcome>hello</from-outcome>
			<to-view-id>/hello.xhtml</to-view-id>
		</navigation-case>
	</navigation-rule>

</faces-config>

Download PrimeFacesHelloWorld.zip

JSF, PrimeFaces ve JPA kullanarak dynamic olarak bir tree view oluşturmaya çalıştım. Yani dynamic olarak oluşturulabilen bir kategori uygulaması yazmaya çalıştım. Bunun için en önemli kısım aşağıda yazılan recursive methodtur.
Recursive method

//Dynamic tree viewi olutruan method.
    public  void recursive(List<Kategoriler> liste, int id,TreeNode node){
            subList2=new ArrayList<Kategoriler>();
            subList2=subKategori(id);
          for(Kategoriler k:subList2){
            TreeNode childNode=new DefaultTreeNode(k.getKategoriAdi(), node);
//Veritabaninda kategori tablosunu tree view seklinde dynamic olarak olusturmayi saglar.
             recursive(subList2, k.getKategoriId(),childNode);
          }

Mesela örnekte donanım altına telefon ve onun da altına android kategorleri ekleyebilmek için recursive olarak yazmak gerekiyor.
Tek tablo ile bütün kategorileri tutuyorum. Aşağıdaki resimde görüldüğü gibi hangi kategoriye alt kategori ekliyorsam onun id sini alıyorum ve kat_ust_id olarak kaydediyorum. En temelde kategorler diye bir node oluşturdum ve onun ust id si 0 dır. Yani sağdaki hiç bir id ile aynı değil.

database table


Aşağıdaki şekilde de anlaşıldığı gibi önce bir ana kategori seçip ve alt kategori ismi girilerek istediğimiz kadar alt kategori girebiliriz.

Yukardaki örnekte üst kategori Donanım ve alt kategori de Telefon olarak oluşturuldu.

android


Parent node: Telefon child node: Android

Yukardaki işlemleri sağlayan jsf bean ve index.xhtml
JSF PrimeFaces Datatable Pagination Example
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:h="http://java.sun.com/jsf/html"
      xmlns:p="http://primefaces.prime.com.tr/ui"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:ui="http://java.sun.com/jsf/facelets">
    <h:head>
        <title>Facelet Title</title>
    </h:head>
    <h:body>
        <ul id="d">

        </ul>
        <h:form>
            <p:panel id="panelId">
                <p:tree value="#{nodeBean.root}" var="node" dynamic="true"
                        selectionMode="single" selection="#{nodeBean.selectedNode}">
                    <p:treeNode>
                        <h:outputText value="#{node}"/>
                    </p:treeNode>
                </p:tree>
                <h:panelGrid columns="2">
                    <h:outputLabel value="Alt kategori ismi*:"/>
                    <h:inputText id="id" value="#{nodeBean.kategIsmi}" required="true">
                        <f:validateLength minimum="1" maximum="30"/>
                    </h:inputText>
                    <p:commandButton value="Yeni Kategori Ekle" update="panelId" action="#{nodeBean.yeniKatEkle}" async="true"/>

                </h:panelGrid>
                <h:message for="id"/>
            </p:panel>
        </h:form>

        <h:form>
            <p:panel>
                <p:column>
                    <h:commandButton action="edit" value="Edit Sayfasina Gidin"/>
                </p:column>
            </p:panel>
        </h:form>

    </h:body>
</html>

NodeBean.java


package com.Bean;

import com.kategori.Kategoriler;
import com.kategori.KategorilerJpaController;
import java.util.ArrayList;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import org.primefaces.event.NodeSelectEvent;
import org.primefaces.model.DefaultTreeNode;
import org.primefaces.model.TreeNode;


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

    private TreeNode root;
    private TreeNode donanim;
    private TreeNode selectedNode;
    private static  List<Kategoriler> liste;
    private static List<Kategoriler> araListe;
    private KategorilerJpaController katCont;
    private Kategoriler katNesnesi;
    private List<Kategoriler> subList2;
    private String kategIsmi;
    public NodeBean() {
        liste=new ArrayList<Kategoriler>();
        root=new DefaultTreeNode("Root",null);
        katCont=new KategorilerJpaController();
        liste=katCont.findKategorilerEntities();
        donanim=new DefaultTreeNode("", root);
//Butun kategorileri tutan bir ana kategori olusturuyor.
//Dynamic olarak sub kategori ekliyor. Recursive olarak hepsini kontrol edilmesi lazim.
        recursive(liste, 0,donanim);

    }
//Dynamic tree viewi olutruan method.
    public  void recursive(List<Kategoriler> liste, int id,TreeNode node){
            subList2=new ArrayList<Kategoriler>();
            subList2=subKategori(id);
          for(Kategoriler k:subList2){
            TreeNode childNode=new DefaultTreeNode(k.getKategoriAdi(), node);
//Veritabaninda kategori tablosunu tree view seklinde dynamic olarak olusturmayi saglar.
             recursive(subList2, k.getKategoriId(),childNode);
          }

    }
//herhangi bir tree nodenin childlarini buluyor.
    public static List<Kategoriler> subKategori(int i)
    {
        araListe=new ArrayList<Kategoriler>();
        for(Kategoriler k:getListe()){
            if(k.getKatUstId()==i){
                araListe.add(k);
            }
        }
        return araListe;
    }
    public static List<Kategoriler> getListe() {
        return liste;
    }
    public Kategoriler getKatNesnesi() {
        return katNesnesi;
    }
    public void setKatNesnesi(Kategoriler katNesnesi) {
        this.katNesnesi = katNesnesi;
    }
    public TreeNode getRoot() {
        return root;
    }
    
    public TreeNode getSelectedNode() {
        return selectedNode;
    }

    public void setSelectedNode(TreeNode selectedNode) {
        this.selectedNode = selectedNode;
    }
    public void secilenNode(NodeSelectEvent event){
        FacesMessage msg=new FacesMessage(FacesMessage.SEVERITY_INFO, "selected", event.getTreeNode().getData().toString());
        FacesContext.getCurrentInstance().addMessage(null, msg);
    }
   
    public String getKategIsmi() {
        return kategIsmi;
    }

    public void setKategIsmi(String kategIsmi) {
        this.kategIsmi = kategIsmi;
    }


    public void yeniKatEkle(){
//        JOptionPane.showMessageDialog(null,katCont.kategoriIdDonder(getSelectedNode().getData().toString()).getKategoriId());
        katNesnesi=new Kategoriler(getKategIsmi(), katCont.kategoriIdDonder(getSelectedNode().getData().toString()).getKategoriId());
         katCont.create(katNesnesi);
         setKategIsmi(null);
    }
    
}

pagination

Edit.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="#{editBean.allRecordList}" var="items" paginator="true"
                             rows="5" rowsPerPageTemplate="5,10,30"
                             paginatorTemplate="{FirstPageLink} {PageLinks} {NextPageLink}
                             {RowsPerPageDropdown}">
                    <p:column>
                        <f:facet name="header">Ad</f:facet>
                        <h:outputText value="#{items.kategoriAdi}"/>
                    </p:column>
                    <p:column>
                        <f:facet name="header">Ust Kategori Id</f:facet>
                        <h:outputText value="#{items.katUstId}"/>
                    </p:column>
                    <p:column>
                        <f:facet name="header">Edit</f:facet>
                        <h:outputLink value="EditComplete.xhtml">
                            <f:param name="id" value="#{items.kategoriId}"/>Düzenle
                        </h:outputLink>
                    </p:column>
                </p:dataTable>
                <h:outputLink value="index.xhtml">Ana Sayfa</h:outputLink>
            </p:panel>
        </h:form>
    </h:body>
</html>

EditBean.java

package com.Bean;

import com.kategori.Kategoriler;
import com.kategori.KategorilerJpaController;
import com.kategori.exceptions.NonexistentEntityException;
import java.util.List;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpServletRequest;


/**
 *
 * @author ubuntu
 */
public class EditBean {
    private KategorilerJpaController contObje;
    private Kategoriler kategoriObje;
    private List<Kategoriler> allRecordList;

    public List<Kategoriler> getAllRecordList() {
        return allRecordList;
    }
    public Kategoriler getKategoriObje() {
        return kategoriObje;
    }
    public void setKategoriObje(Kategoriler kategoriObje) {
        this.kategoriObje = kategoriObje;
    }
    public void setAllRecordList(List<Kategoriler> allRecordList) {
        this.allRecordList = allRecordList;
    }
    
    public EditBean() {
        contObje=new KategorilerJpaController();
        allRecordList=contObje.findKategorilerEntities();
        kategoriObje=new Kategoriler();
//Request nesnesi olusturup <h:outputLink> ile
//<f:param name="id" value="#{items.kategoriId}"/> degeri aliniyor
        FacesContext context=FacesContext.getCurrentInstance();
        HttpServletRequest request=(HttpServletRequest) context.getExternalContext().getRequest();
        if(request.getParameter("id")!=null){
            int katId=Integer.parseInt(request.getParameter("id"));
            kategoriObje=contObje.findKategoriler(katId);
        }
    }
    public void editCpmlete() throws NonexistentEntityException, Exception{
//<h:selectOneMenu value="#{editBean.kategoriObje.katUstId}"> ta ust kategori secilir ve
//<h:inputText value="#{editBean.kategoriObje.kategoriAdi}" required="true"/> alanina da kategori ismi duzenlenir
//secilen deger ve kategori adi edi() hazir medotu ile guncellenir bilgiler. Bu da kategorId primarykey iel guncellenir.
        contObje.edit(kategoriObje);
    }
//reset ile nesneye null deger atadim.
    public void reset(){
        getKategoriObje().setKatUstId(null);
        getKategoriObje().setKategoriAdi(null);
        getKategoriObje().setKategoriId(null);
    }
}

select menu

EditComplete.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>
                <h:inputHidden value="#{editBean.kategoriObje.kategoriId}"/>
                <h:panelGrid columns="2" id="yenile">
                    <h:outputText value="Kategori Adi"/>
                    <h:inputText value="#{editBean.kategoriObje.kategoriAdi}" required="true"/>
                    <h:outputText value="Ust Kategori ID"/>
                    <h:selectOneMenu value="#{editBean.kategoriObje.katUstId}">
                        <f:selectItems value="#{editBean.allRecordList}" var="items"
                                       itemLabel="#{items.kategoriAdi}" itemValue="#{items.kategoriId}"/>
                    </h:selectOneMenu>
                    <h:commandButton value="Kaydet" action="#{editBean.editCpmlete}"/>
                    <p:commandButton value="Reset" action="#{editBean.reset}" update="yenile"/>
                </h:panelGrid>
            </p:panel>
            <p:button outcome="geri" value="Geri Don"/>
        </h:form>
    </h:body>
</html>

Kategoriler.java

package com.kategori;

import java.io.Serializable;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;

/**
 *
 * @author ubuntu
 */
@Entity
@Table(name = "kategoriler")
@NamedQueries({
    @NamedQuery(name = "Kategoriler.findAll", query = "SELECT k FROM Kategoriler k"),
    @NamedQuery(name = "Kategoriler.findByKategoriId", query = "SELECT k FROM Kategoriler k WHERE k.kategoriId = :kategoriId"),
    @NamedQuery(name = "Kategoriler.findByKategoriAdi", query = "SELECT k FROM Kategoriler k WHERE k.kategoriAdi = :kategoriAdi"),
    @NamedQuery(name = "Kategoriler.findByKatUstId", query = "SELECT k FROM Kategoriler k WHERE k.katUstId = :katUstId")})
public class Kategoriler implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "kategori_id")
    private Integer kategoriId;
    @Basic(optional = false)
    @Column(name = "kategori_adi")
    private String kategoriAdi;
    @Column(name = "kat_ust_id")
    private Integer katUstId;

    public Kategoriler() {
    }

    public Kategoriler(Integer kategoriId) {
        this.kategoriId = kategoriId;
    }

    public Kategoriler(String kategoriAdi) {
        this.kategoriAdi = kategoriAdi;
    }

    public Kategoriler(Integer kategoriId, String kategoriAdi) {
        this.kategoriId = kategoriId;
        this.kategoriAdi = kategoriAdi;
    }

    public Kategoriler(String kategoriAdi, Integer katUstId) {
        this.kategoriAdi = kategoriAdi;
        this.katUstId = katUstId;
    }

    public Integer getKategoriId() {
        return kategoriId;
    }

    public void setKategoriId(Integer kategoriId) {
        this.kategoriId = kategoriId;
    }

    public String getKategoriAdi() {
        return kategoriAdi;
    }

    public void setKategoriAdi(String kategoriAdi) {
        this.kategoriAdi = kategoriAdi;
    }

    public Integer getKatUstId() {
        return katUstId;
    }

    public void setKatUstId(Integer katUstId) {
        this.katUstId = katUstId;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (kategoriId != null ? kategoriId.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Kategoriler)) {
            return false;
        }
        Kategoriler other = (Kategoriler) object;
        if ((this.kategoriId == null && other.kategoriId != null) || (this.kategoriId != null && !this.kategoriId.equals(other.kategoriId))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "com.kategori.Kategoriler[kategoriId=" + kategoriId + "]";
    }

}

persistence


persistence.xml

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
  <persistence-unit name="KategorilerPU" transaction-type="RESOURCE_LOCAL">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <non-jta-data-source/>
    <class>com.kategori.Kategoriler</class>
    <exclude-unlisted-classes>true</exclude-unlisted-classes>
    <properties>
      <property name="hibernate.connection.username" value="root"/>
      <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>
      <property name="hibernate.connection.password" value="123"/>
      <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/odev"/>
      <property name="hibernate.cache.provider_class" value="org.hibernate.cache.NoCacheProvider"/>
      <property name="hibernate.hbm2ddl.auto" value="update"/>
    </properties>
  </persistence-unit>
</persistence>

faces-config


faces-config.xml

<?xml version='1.0' encoding='UTF-8'?>

<!-- =========== FULL CONFIGURATION FILE ================================== -->

<faces-config version="2.0"
    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-facesconfig_2_0.xsd">
    <navigation-rule>
        <from-view-id>/index.xhtml</from-view-id>
        <navigation-case>
            <from-outcome>edit</from-outcome>
            <to-view-id>/Edit.xhtml</to-view-id>
        </navigation-case>
    </navigation-rule>
    <managed-bean>
        <managed-bean-name>nodeBean</managed-bean-name>
        <managed-bean-class>com.Bean.NodeBean</managed-bean-class>

        <managed-bean-scope>request</managed-bean-scope></managed-bean>
    <managed-bean>
        <managed-bean-name>editBean</managed-bean-name>
        <managed-bean-class>com.Bean.EditBean</managed-bean-class>
        <managed-bean-scope>request</managed-bean-scope>
    </managed-bean>
    <navigation-rule>
        <from-view-id>/EditComplete.xhtml</from-view-id>
        <navigation-case>
            <from-outcome>geri</from-outcome>
            <to-view-id>/Edit.xhtml</to-view-id>
        </navigation-case>
    </navigation-rule>
</faces-config>

Ben NetBeans 6.9.1 kullandığımdan PrimeFaces default olarak gelmiyor. Bunun için
1. primafaces-2.2.1.jar kütüphanesini ekledim
2. web-fragment.xml dosyasını oluşturdum. Aşağıda o dosya içeriği var.
3.

xmlns:p="http://primefaces.prime.com.tr/ui"

xml namespacesini ekledim.

web-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>

Uygulamayi indirmek için tiklayin. Ubuntuda uygulamayı .zip haline getiriyorum. Eğer açamazsanız veya link bozuksa dm atabilirim.

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>

Bu örnekte PrimeFaces Hibernate ile nasıl kullanılabileceğini basitçe göstermeye çalıştım. JSF Hibernate örneğine bakabilirsiniz. PrimeFaces NetBeans 7.0 ile beraber default olarak geliyor. Örnekte ad ve soyad değerlerini hibernate kullanarak veritabanına kaydediyor.
Netbeans ile web projesi oluşturduktan sonra JavaServer Faces frameworkunu sçtikten sonra Components–>Components Suite–>PrimeFaces 2.1 seçiyoruz.
primefaces
Sonra Hibernate frameworkunu seçip bir tane database seçiniz. Hibernate örneğine bakabilirsiniz.
hibernate primefaces
JSF ve JSP ile ilgili detaylı bilgi için tıklayınız.
Projenizi sağ tıklayıp New–>Other–>JavaServer Faces–>JSF Faces Configuration ile faces-config.xml(JSF Managed Bean ayarları yapılır) dosyasını oluşturun. Sonra JSF Mnaged Bean oluşturun.
JSF Managed Bean
Aşağıdaki resimde JSF Managed Bean oluşturulurken IDE faces-config.xml dosyasında otomatik ayarlama kodunu yazıyor genelde.
facesconfig
Eğer kendisi oluşturmuyorsa aşağıdaki resimde görüldüğü gibi kendiniz de yazabilrisiniz.
managed bean
faces-config.xml

<?xml version='1.0' encoding='UTF-8'?>

<!--Note: <managed-bean-name>uyeKaydet</managed-bean-name> Bean ismi kucuk harfle basliyor -->
<faces-config version="2.0"
    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-facesconfig_2_0.xsd">
   
   <managed-bean>
        <managed-bean-name>uyeKaydet</managed-bean-name>
        <managed-bean-class>ethem.UyeKaydet</managed-bean-class>
        <managed-bean-scope>request</managed-bean-scope>
    </managed-bean>
</faces-config>

Burada .. kendinizde tanımlayabilirisniz.
Uygulama resmi
netbeans
Otomatik eklenilen PrimeFaces ve Hibernate jar dosyaları
jar
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 prependId="false">  
        <p:panel header="Uye Formu">  
            <h:panelGrid columns="2"> 
                
                <h:outputLabel value="Ad:*" for="ad_alani"></h:outputLabel>  
                <h:inputText id="ad_alani" value="#{uyeKaydet.yeniNesne.ad}" required="true"/>  

                <h:outputLabel value="Soyad:*" for="soyad_alani"></h:outputLabel>  
                <h:inputText id="soyad_alani" value="#{uyeKaydet.yeniNesne.soyad}" required="true"/>  

                <p:commandButton value="Add" actionListener="#{uyeKaydet.kaydet}"/>  
            </h:panelGrid>  
        </p:panel> 
           <h:panelGrid columns="2">
               <h:outputText value="#{uyeKaydet.yeniNesne.ad}"/>
               <h:outputText value="#{uyeKaydet.yeniNesne.soyad}"/>
           </h:panelGrid>
       </h:form>  
        
    </h:body>
</html>

PrimeFaces: xmlns:p=”http://primefaces.prime.com.tr/ui
Uye.java

package ethemsulan;
// Generated Dec 6, 2010 6:16:25 PM by Hibernate Tools 3.2.1.GA

public class Uye  implements java.io.Serializable {


     private Integer id;
     private String ad;
     private String soyad;

    public Uye() {
    }

    public Uye(String ad, String soyad) {
       this.ad = ad;
       this.soyad = soyad;
    }
   
    public Integer getId() {
        return this.id;
    }
    
    public void setId(Integer id) {
        this.id = id;
    }
    public String getAd() {
        return this.ad;
    }
    
    public void setAd(String ad) {
        this.ad = ad;
    }
    public String getSoyad() {
        return this.soyad;
    }
    
    public void setSoyad(String soyad) {
        this.soyad = soyad;
    }

}

UyeKaydet.java

package ethem;

import ethemsulan.Uye;

/**
 *
 * @author ubuntu
 */
public class UyeKaydet {
    
    private ImplementsMem impObject=new ImplementsMem();
    private Uye yeniNesne;

    public Uye getYeniNesne() {
        return yeniNesne;
    }

    public void setYeniNesne(Uye yeniNesne) {
        this.yeniNesne = yeniNesne;
    }
    public UyeKaydet() {
        yeniNesne=new Uye();
    }
//Hibernate ile kaydetmek için metod çağrılıyor.
    public void kaydet()
    {
        impObject.saveWithHibernate(yeniNesne);
    }

}

ImplementsMem.java

package ethem;

import ethemsulan.Uye;
import org.hibernate.Transaction;
import org.hibernate.Session;
import ethemsulan.HibernateUtil;

public class ImplementsMem {

    public void saveWithHibernate(Uye yeniNesne) {
    Session newSession=HibernateUtil.getSessionFactory().openSession();
    Transaction txT=newSession.beginTransaction();
    newSession.save(yeniNesne);
    System.out.println("Kayit basarili");
    txT.commit();
    newSession.close();
    }

}

Hibernate daha önce uygulamalarda açıklamaya çalışmıştım. Aşağıda bu örnekle ilgili kodlardır.
hibernate.reveng.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-reverse-engineering PUBLIC "-//Hibernate/Hibernate Reverse Engineering DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-reverse-engineering-3.0.dtd">
<hibernate-reverse-engineering>
  <schema-selection match-catalog="sozluk"/>
  <table-filter match-name="uye"/>
</hibernate-reverse-engineering>

hibernate.cfg.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
  <session-factory>
    <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
    <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
    <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/sozluk</property>
    <property name="hibernate.connection.username">root</property>
    <property name="hibernate.connection.password">123</property>
    <mapping resource="ethemsulan/Uye.hbm.xml"/>
  </session-factory>
</hibernate-configuration>

HibernateUtil.java

package ethemsulan;


import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.SessionFactory;

/**
 * Hibernate Utility class with a convenient method to get Session Factory object.
 *
 * @author ubuntu
 */
public class HibernateUtil {
    private static final SessionFactory sessionFactory;

    static {
        try {
            // Create the SessionFactory from standard (hibernate.cfg.xml) 
            // config file.
            sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();
        } catch (Throwable ex) {
            // Log the exception. 
            System.err.println("Initial SessionFactory creation failed." + ex);
            throw new ExceptionInInitializerError(ex);
        }
    }

    public static SessionFactory getSessionFactory() {
        return sessionFactory;
    }
}