Archive for the ‘ JSF(Java Server Faces) ’ Category

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>

JSF Managed Bean ile Ajax() kullanmasına örnek vermeye çalıştım. İnput alanına bir deger girip button tıklandığında ajax ile diğer sayfayı çağırıyor ve o sayfada ekrana yazıyor. Bu şöyle oluyor. Button tıklandığında girilen deger KulBean’e kayedilir ve ajax ile çağrılan sayfada KulBean’den kayedilen değer alınıp ekrana yazılır.
JSF Hibernate örneğine bakmak için tıklayın.
JSF’de Managed Bean, sayfalar arasında veri taşımayı(cacheliyor yani) sağlar. Bu örnekte asıl amaç JSF 2.0 ile gelen bir-iki kolaylığı göstermektir. JSF1.x ile Managed Bean tanımlamak için JSF Faces Configuration(faces-config.xml) içine mutlaka aşağıdaki gibi bir tanımlama yapman gerekiyordu.
1.
faces-config.xml

<managed-bean>
    <managed-bean-name>kulBean</managed-bean-name>
    <managed-bean-class>com.ethemsulan.KulBean</managed-bean-class>
    <managed-bean-scope>request</managed-bean-scope>
</managed-bean>

JSF 2.0 da bunu yazmak zorunda değilsin. Beanimizin başına aşağıdaki gibi bir annotation ile managed bean olduğunu belirtmiş oluyoruz.

@ManagedBean
@RequestScoped

2.
index.xhtml sayfasından KulSayfasi.xhtml sayfasına navigasyon için(mesela girilen degeri diğer sayfaya aktarmak bean ile) faces-config.xml içine aşağıdaki kodu yazmak gerekiyordu.
faces-config.xml

<navigation-rule>
    <from-view-id>index.xhtml</from-view-id>
    <navigation-case>
        <from-outcome>KulSayfasi</from-outcome>
        <to-view-id>/KulSayfasi.xhtml</to-view-id>
    </navigation-case>
</navigation-rule>

Ama JSF 2.0 ile aşağıdaki gibi sayafa ismi ile navigasyonu gerçekleştirebiliriz. Button tıklandığında action=’hangiSayfaIsmi’ yazilmişsa o sayfaya gider.

<h:commandButton action="KulSayfasi" value="Gonder"/>

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:f="http://java.sun.com/jsf/core">
    <h:head>
        <title>Facelet Title</title>
    </h:head>
    <h:body>
        <h:form>
            <h:inputText id="p" value="#{kulBean.property}"/>
            <h:commandButton action="KulSayfasi" value="Gonder">
                <f:ajax execute="p"/>
            </h:commandButton>
        </h:form>
    </h:body>
</html>

KulSayfasi.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">
    <h:head>
        <title>Facelet Title</title>
    </h:head>
    <h:body>
        Ajax ile gonderilen deger:<h:outputText value="#{kulBean.property}"/>
    </h:body>
</html>

KulBean.java – JSF Managed Bean

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

package com.ethemsulan;

import java.io.Serializable;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;

/**
 *
 * @author ubuntu
 */
@ManagedBean
@RequestScoped
public class KulBean implements Serializable{

    /** Creates a new instance of KulBean */
    public KulBean() {
    }
    public String property;

    public String getProperty() {
        return property;
    }

    public void setProperty(String property) {
        this.property = property;
    }

}

Bu örnek bu kadardı ama göstermek içinde faces-config.xml dosyasında nasıl tanımlandığına bakabilirsiniz. Bu .xml dosyasının arayüzü de var ve oradan da düzenleyebilirsiniz. Zaten New->Other->JavaServerFaces den JSF Managed Bean seçildiğinde @ManagedBean’i ekliyor. Normal java classını managed bean yapmak için ise sınıfın başına
import javax.faces.bean.*; ile ekleyin ve @ yazıp ctr +space basınca bir sürü annotation çıkıyor
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">

<managed-bean>
    <managed-bean-name>kulBean</managed-bean-name>
    <managed-bean-class>com.ethemsulan.KulBean</managed-bean-class>
    <managed-bean-scope>request</managed-bean-scope>
</managed-bean>
<navigation-rule>
    <from-view-id>index.xhtml</from-view-id>
    <navigation-case>
        <from-outcome>KulSayfasi</from-outcome>
        <to-view-id>/KulSayfasi.xhtml</to-view-id>
    </navigation-case>
</navigation-rule>
</faces-config>

faces-config.xml eklenmesinin resmi

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;
    }
}

JavaServer Faces(JSF) MVC(Model View Controller) patterni üzerine kurulmuştur. Model: Bu sınıflar işlenen verileri içerir. View: Model sınıfının içerdiği verileri gösterir. Controller: Model ve View arasındaki etkileşiminden sorumludur.
JSF’nin diğer bir özelliği işlemlerin daha hızlı ve basit gerçekleşmesi için JSTL kullanmasıdır. Bu da biraz sınırlama getirdğinden pek tercih etmiyorum. Bana JSP daha kolay ve eğlenceli geliyor. JSF 2.0 ile gelen PrimeFaces bileşen takımı JSF dünyasında bir devrim yarattı diyebiliriz.
Burada fazla detaya girmeden Java web, istemci taraflı applet, sunucu tabanlı teknolojiler ise Servlet, daha sonra html web sayfaları içine eklemesiyle JSP ve JSF şeklinde teknolojileri sıralayabiliriz. Ayrıca Java Web Frameworkleri var. Eğer Netbeans ile web projesini oluşturmayı bilmiyorsanız Merhaba JSP örneğine bakabilirisniz.
Jsf Hibernate
Yukardaki resimde görüldüğü gibi uygulamanıza JavaServer Faces ve Hibernate frameworklerini ekleyin. Eğer daha önce Hibernate için Database Connection oluşturmamışsanız Hibernate Ajax JSP örneğine bakabilirisniz.

Proje oluşturduktan sonra welcomeJSF.jsp ve hibernate.cfg.xml dosyaları oluşur. Diğer hibernate dosyaların oluşturmak için resimdeki sırayı takip edebilrisiniz.
hibernate query and jsf
Kontrol.java

package ethem;

import ethemsulan.Kisi;
import ethemsulan.NewHibernateUtil;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.hibernate.SQLQuery;
import org.hibernate.Session;

public class Kontrol {

    private ArrayList<Kisi> listemiz;

    public ArrayList<Kisi> getListemiz() {
        return listemiz;
    }

    public void setListemiz(ArrayList<Kisi> listemiz) {
        this.listemiz = listemiz;
    }
    private Session session;

    public ArrayList<Kisi> getAllRecord() {
        listemiz = new ArrayList<Kisi>();
        session = NewHibernateUtil.getSessionFactory().openSession();
        String sql = "select {k.*} from kisi k";
        SQLQuery query = session.createSQLQuery(sql);
        query.addEntity("k", Kisi.class);
        List list = query.list();
        Iterator ite = list.iterator();
        while (ite.hasNext()) {
            Kisi ws = (Kisi) ite.next();
            getListemiz().add(ws);
        }
        session.close();
        return getListemiz();
    }
}

Hibernate ile ilgili işlemlerden Kontrol.java sınıfını yazdım ve faces-config.xml içine tanımladım. Kontrol.java sınıfı ismi ve hangi paket altında olduğunu belirttim.
faces-config.xml

<?xml version='1.0' encoding='UTF-8'?>
<faces-config version="1.2" 
    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_1_2.xsd">

<managed-bean>
    <managed-bean-name>Kontrol</managed-bean-name>
    <managed-bean-class>ethem.Kontrol</managed-bean-class>
    <managed-bean-scope>request</managed-bean-scope>
</managed-bean>

</faces-config>

2. welcomeJSF.jsp zaten proje oluşturuken yaratılıyor. Çalıştırıldığında sayfada MySql veritabanında kisi ismindeki tablodaki(id,ad,soyad sutunları var sadece) bilgileri JSF data table içinde listeledim.
welcomeJSF.jsp

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%-- JSTL taglibler. --%>
<%@taglib prefix="f" uri="http://java.sun.com/jsf/core"%>
<%@taglib prefix="h" uri="http://java.sun.com/jsf/html"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">

<%--
    This file is an entry point for JavaServer Faces application.
--%>
<f:view>
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
            <title>JSP Page</title>
        </head>
        <body>
            <h:dataTable id="id" value="#{Kontrol.allRecord}" var="item">
                <h:column>
                    <h:outputText value="#{item.id}">Id:</h:outputText><br>
                </h:column>
                <h:column>
                    <h:outputText value="#{item.ad}">Ad:</h:outputText><br>
                </h:column>
                <h:column>
                    <h:outputText value="#{item.soyad}">Soyad:</h:outputText><br>
                </h:column>
            </h:dataTable>
        </body>
    </html>
</f:view>

Note: value=”#{Kontrol.allRecord}” var=”item” kayıtlara erişiyoruz. value=”#{item.ad}” ile veritabanından çekilen ad recorduna erişiyoruz. Daha iyi anlamak için JSTL ile MySql örneğine bakabilirsiniz.
Cikti aşağıdaki gibidir.
çıktı jsf
Diğer dosyaların da sadece kodlarını ekliyorum.

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</prope<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 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-app_2_5.xsd">
    <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>/faces/*</url-pattern>
    </servlet-mapping>
    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>
    <welcome-file-list>
        <welcome-file>faces/welcomeJSF.jsp</welcome-file>
    </welcome-file-list>
</web-app>rty>
    <property name="hibernate.connection.username">root</property>
    <mapping resource="ethemsulan/Kisi.hbm.xml"/>
  </session-factory>
</hibernate-configuration>

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="kisi"/>
</hibernate-reverse-engineering>

Kisi.hbm.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated Nov 6, 2010 3:17:52 AM by Hibernate Tools 3.2.1.GA -->
<hibernate-mapping>
  <class catalog="sozluk" name="ethemsulan.Kisi" table="kisi">
    <id name="id" type="java.lang.Integer">
      <column name="id"/>
      <generator class="identity"/>
    </id>
    <property name="ad" type="string">
      <column name="ad"/>
    </property>
    <property name="soyad" type="string">
      <column name="soyad"/>
    </property>
  </class>
</hibernate-mapping>

Kisi.java

package ethemsulan;
// Generated Nov 6, 2010 3:17:52 AM by Hibernate Tools 3.2.1.GA

/**
 * Kisi generated by hbm2java
 */
public class Kisi  implements java.io.Serializable {
    
     private Integer id;
     private String ad;
     private String soyad;

    public Kisi() {
    }

    public Kisi(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;
    }
}

NewHibernateUtil.java

package ethemsulan;

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

public class NewHibernateUtil {
    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;
    }
}

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 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-app_2_5.xsd">
    <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>/faces/*</url-pattern>
    </servlet-mapping>
    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>
    <welcome-file-list>
        <welcome-file>faces/welcomeJSF.jsp</welcome-file>
    </welcome-file-list>
</web-app>