<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;A0MDQXg8fCp7ImA9WhRRFE4.&quot;"><id>tag:blogger.com,1999:blog-2509844667593749835</id><updated>2011-11-28T02:17:50.674+02:00</updated><category term="jsf 2" /><category term="hibernate" /><category term="i18n" /><category term="Message Bundle" /><category term="ipucu" /><category term="EntityManager" /><category term="jdbc" /><category term="Binding" /><category term="mysql" /><category term="Yönlendirme" /><category term="datatable" /><category term="Kurulum" /><category term="ajax" /><category term="converter" /><category term="Managed Bean" /><category term="tomcat" /><category term="Temel Bileşenler" /><category term="primefaces" /><category term="jboss tools" /><category term="validator" /><category term="myfaces" /><category term="jpa" /><category term="facelet" /><category term="Eclipse" /><category term="templating" /><category term="JSF" /><category term="Örnek Proje" /><category term="xhtml" /><category term="database" /><title>JavaServer Faces - Türkçe</title><subtitle type="html">Mojarra jsf 1.2 ,jsf 2&amp;#39;ye yeni başlayanlar için türkçe kaynak.
   
&lt;a href="http://www.ibrahimdemir.name.tr/index.php?catg=jsf&amp;amp;page=jsf_0001"&gt;Kitap formatı için tıklayın&lt;/a&gt;</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://jsf-tr.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://jsf-tr.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/2509844667593749835/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>ibrahim demir</name><uri>http://www.blogger.com/profile/14063980678411736699</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="23" src="http://4.bp.blogspot.com/_ELhi79hYqkg/S1mqZHoY-NI/AAAAAAAAAFA/RV2hY7WhL7U/S220/id.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>58</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/JavaserverFaces" /><feedburner:info uri="javaserverfaces" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;C0cCRnkzeyp7ImA9Wx5SFkQ.&quot;"><id>tag:blogger.com,1999:blog-2509844667593749835.post-1371052428586376628</id><published>2010-08-13T12:17:00.000+03:00</published><updated>2010-08-13T12:17:47.783+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-08-13T12:17:47.783+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Örnek Proje" /><title>örnek proje : online sınav - 12 - Sayfa giriş/değişiklik</title><content type="html">Sayfa liste giriş değişlik işlemeri için gerekli dosyalar :&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;PAGES&lt;/b&gt;&lt;br /&gt;
&lt;pre class="brush: sql;"&gt;CREATE TABLE PAGES (
    PAGE_ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
    PAGE_CODE VARCHAR( 255 ) NOT NULL ,
    PAGE_DESC VARCHAR( 255 ) NOT NULL ,
    ROLE_ID INT NOT NULL
) ENGINE = MYISAM ;
&lt;/pre&gt;&lt;br /&gt;
&lt;b&gt;Page.java&lt;/b&gt;&lt;br /&gt;
&lt;pre class="brush: java;"&gt;package entity;

import java.io.Serializable;

public class Page implements Serializable {

 private static final long serialVersionUID = -1869745073687894593L;
 private Integer id;
 private String code;
 private String desc;
 private Role role;

 public Integer getId() {
  return id;
 }

 public void setId(Integer id) {
  this.id = id;
 }

 public String getCode() {
  return code;
 }

 public void setCode(String code) {
  this.code = code;
 }

 public String getDesc() {
  return desc;
 }

 public void setDesc(String desc) {
  this.desc = desc;
 }

 public Role getRole() {
  return role;
 }

 public void setRole(Role role) {
  this.role = role;
 }

}
&lt;/pre&gt;&lt;br /&gt;
&lt;b&gt;PageDAO.java&lt;/b&gt;&lt;br /&gt;
&lt;pre class="brush: java;"&gt;package data;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import entity.Page;
import entity.Role;

public class PageDAO implements Serializable {

 /**
  * 
  */
 private static final long serialVersionUID = 4783917742082486720L;
 private static String SQL_SELECT = "SELECT A.* "
   + " ,B.ROLE_CODE,B.ROLE_DESC FROM PAGES A"
   + " INNER JOIN ROLES B ON A.ROLE_ID=B.ROLE_ID ";
 private static String SQL_SELECT_BY_ID = SQL_SELECT + " WHERE A.PAGE_ID=?";
 private static String SQL_SELECT_BY_CODE = SQL_SELECT + " WHERE A.PAGE_CODE=?";
 private static String SQL_INSERT = "INSERT INTO PAGES VALUES(null, ?, ?, ?)";
 private static String SQL_UPDATE = "UPDATE PAGES SET PAGE_CODE=?, PAGE_DESC=?, ROLE_ID=? WHERE PAGE_ID=?";

 private List&amp;lt;Page&amp;gt; getTable(String query, Object... values) {
  List&amp;lt;Page&amp;gt; table = new ArrayList&amp;lt;Page&amp;gt;();
  List&amp;lt;Map&amp;lt;String, Object&amp;gt;&amp;gt; data = DataAdapter.getData(query, values);
  for (int i = 0; i &amp;lt; data.size(); i++) {
   Map&amp;lt;String, Object&amp;gt; row = new HashMap&amp;lt;String, Object&amp;gt;();
   Page page = new Page();
   Role role = new Role();
   row = data.get(i);
   role.setId((Integer) row.get("ROLE_ID"));
   role.setCode((String) row.get("ROLE_CODE"));
   role.setDesc((String) row.get("ROLE_DESC"));
   page.setId((Integer) row.get("PAGE_ID"));
   page.setCode((String) row.get("PAGE_CODE"));
   page.setDesc((String) row.get("PAGE_DESC"));
   page.setRole(role);
   table.add(page);
  }
  return table;
 }

 public List&amp;lt;Page&amp;gt; getPages() {
  return getTable(SQL_SELECT);
 }

 public Page getPage(long id) {
  List&amp;lt;Page&amp;gt; pages = getTable(SQL_SELECT_BY_ID, id);
  if (pages.size() &amp;gt; 0) {
   return pages.get(0);
  } else {
   return null;
  }
 }

 public Page getPage(String code) {
  List&amp;lt;Page&amp;gt; pages = getTable(SQL_SELECT_BY_CODE, code);
  if (pages.size() &amp;gt; 0) {
   return pages.get(0);
  } else {
   return null;
  }
 }

 public void insert(Page page) {
  Object values[] = { page.getCode(), page.getDesc(),
    page.getRole().getId() };
  DataAdapter.persist(SQL_INSERT, values);
 }

 public void update(Page page) {
  Object values[] = { page.getCode(), page.getDesc(),
    page.getRole().getId(), page.getId() };
  DataAdapter.persist(SQL_UPDATE, values);
 }

}
&lt;/pre&gt;&lt;b&gt;PageList.java&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: java;"&gt;package controller;

import java.io.Serializable;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

import data.PageDAO;
import entity.Page;

@ManagedBean(name = "pageList")
@ViewScoped
public class PageList implements Serializable {

 private static final long serialVersionUID = 1L;
 private List&amp;lt;Page&amp;gt; pages;

 public PageList() {
  pages = new PageDAO().getPages();
 }

 public List&amp;lt;Page&amp;gt; getPages() {
  return pages;
 }

 public void setPages(List&amp;lt;Page&amp;gt; pages) {
  this.pages = pages;
 }

}

&lt;/pre&gt;&lt;br /&gt;
&lt;b&gt;pageList.xhtml&lt;/b&gt;&lt;br /&gt;
&lt;pre class="brush: xml;"&gt;&amp;lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&amp;gt;
&amp;lt;ui:composition xmlns="http://www.w3.org/1999/xhtml"
 xmlns:h="http://java.sun.com/jsf/html"
 xmlns:f="http://java.sun.com/jsf/core"
 xmlns:ui="http://java.sun.com/jsf/facelets"
 xmlns:fn="http://java.sun.com/jsp/jstl/functions"
 template="/resources/template.xhtml"&amp;gt;

 &amp;lt;ui:param name="title" value="Sayfa Listesi" /&amp;gt;
 &amp;lt;ui:define name="content"&amp;gt;
  &amp;lt;h:form prependId="false"&amp;gt;
   &amp;lt;h:button outcome="pageEdit.xhtml" value="Yeni Kayıt" /&amp;gt;

   &amp;lt;h:dataTable value="#{pageList.pages}" var="page"
    rendered="#{fn:length(pageList.pages)&amp;gt;0}"&amp;gt;
    &amp;lt;h:column&amp;gt;
     &amp;lt;f:facet name="header"&amp;gt;Id&amp;lt;/f:facet&amp;gt;
        #{page.id}
      &amp;lt;/h:column&amp;gt;
    &amp;lt;h:column&amp;gt;
     &amp;lt;f:facet name="header"&amp;gt;Kod&amp;lt;/f:facet&amp;gt;
        #{page.code}
      &amp;lt;/h:column&amp;gt;
    &amp;lt;h:column&amp;gt;
     &amp;lt;f:facet name="header"&amp;gt;Tanım&amp;lt;/f:facet&amp;gt;
        #{page.desc}
      &amp;lt;/h:column&amp;gt;
    &amp;lt;h:column&amp;gt;
     &amp;lt;f:facet name="header"&amp;gt;Rol&amp;lt;/f:facet&amp;gt;
        #{page.role.desc}
      &amp;lt;/h:column&amp;gt;
    &amp;lt;h:column&amp;gt;
     &amp;lt;f:facet name="header"&amp;gt;İşlem&amp;lt;/f:facet&amp;gt;
     &amp;lt;h:link outcome="pageEdit.xhtml?faces-redirect=true"
      value="Düzenle"&amp;gt;
      &amp;lt;f:param name="id" value="#{page.id}" /&amp;gt;
     &amp;lt;/h:link&amp;gt;
    &amp;lt;/h:column&amp;gt;

   &amp;lt;/h:dataTable&amp;gt;
  &amp;lt;/h:form&amp;gt;

 &amp;lt;/ui:define&amp;gt;
&amp;lt;/ui:composition&amp;gt;
&lt;/pre&gt;&lt;br /&gt;
&lt;b&gt;PageEdit.java&lt;/b&gt;&lt;br /&gt;
&lt;pre class="brush: java;"&gt;package controller;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.model.SelectItem;

import util.FacesUtil;
import data.PageDAO;
import data.RoleDAO;
import entity.Page;
import entity.Role;

@ManagedBean(name = "pageEdit")
@ViewScoped
public class PageEdit implements Serializable {

 private static final long serialVersionUID = 1L;
 private Page page = new Page();

 private List&amp;lt;SelectItem&amp;gt; selectRoles = new ArrayList&amp;lt;SelectItem&amp;gt;();
 private PageDAO pageDAO = new PageDAO();

 public PageEdit() {
  if (FacesUtil.getRequestParameter("id") != null) {
   int id = Integer.parseInt(FacesUtil.getRequestParameter("id"));
   page = pageDAO.getPage(id);
  } else {
   page.setRole(new Role());
  }
  List&amp;lt;Role&amp;gt; roles = new RoleDAO().getRoles();
  selectRoles.clear();
  for (Role role : roles) {
   selectRoles.add(new SelectItem(role.getId(), role.getDesc()));
  }

 }

 public Page getPage() {
  return page;
 }

 public void setPage(Page page) {
  this.page = page;
 }

 public List&amp;lt;SelectItem&amp;gt; getSelectRoles() {
  return selectRoles;
 }

 public void setSelectRoles(List&amp;lt;SelectItem&amp;gt; selectRoles) {
  this.selectRoles = selectRoles;
 }

 public String save() {
  if (control()) {
   if (page.getId() == null || page.getId() == 0)
    pageDAO.insert(page);
   else
    pageDAO.update(page);
   return "pageList.xhtml?faces-redirect=true";
  }
  return null;
 }

 public boolean control() {
  if (page.getId() != null &amp;&amp; page.getId() &amp;gt; 0) {
   Page dbPage = pageDAO.getPage(page.getCode());
   if (dbPage != null &amp;&amp; (page.getId() != dbPage.getId())) {
    FacesUtil.addMessage("Sayfa kodu önce kullanılmış",
      FacesMessage.SEVERITY_ERROR);
    return false;
   }
  }
  return true;
 }
}
&lt;/pre&gt;&lt;br /&gt;
&lt;b&gt;pageEdit.xhtml&lt;/b&gt;&lt;br /&gt;
&lt;pre class="brush: xml;"&gt;&amp;lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&amp;gt;
&amp;lt;ui:composition xmlns="http://www.w3.org/1999/xhtml"
 xmlns:h="http://java.sun.com/jsf/html"
 xmlns:f="http://java.sun.com/jsf/core"
 xmlns:ui="http://java.sun.com/jsf/facelets"
 xmlns:fn="http://java.sun.com/jsp/jstl/functions"
 template="/resources/template.xhtml"&amp;gt;

 &amp;lt;ui:param name="title" value="Sayfa Giriş/Düzenle" /&amp;gt;
 &amp;lt;ui:define name="content"&amp;gt;
  &amp;lt;h:form prependId="false"&amp;gt;
   &amp;lt;h:panelGrid columns="2"&amp;gt;
    &amp;lt;h:outputText value="Kod" /&amp;gt;
    &amp;lt;h:inputText value="#{pageEdit.page.code}" required="true"
     requiredMessage="Kod alanı boş geçilemez..." /&amp;gt;
    &amp;lt;h:outputText value="Tanım" /&amp;gt;
    &amp;lt;h:inputText value="#{pageEdit.page.desc}" required="true"
     requiredMessage="Tanım alanı boş geçilemez..." /&amp;gt;
    &amp;lt;h:outputText value="Rol" /&amp;gt;
    &amp;lt;h:selectOneMenu value="#{pageEdit.page.role.id}"&amp;gt;
     &amp;lt;f:selectItems value="#{pageEdit.selectRoles}" /&amp;gt;
    &amp;lt;/h:selectOneMenu&amp;gt;
    &amp;lt;h:panelGroup&amp;gt;
     &amp;lt;h:commandButton action="#{pageEdit.save}" value="Kaydet" /&amp;gt;
     #{' '}
     &amp;lt;h:button outcome="pageList.xhtml?faces-redirect=true"
      value="Vazgeç" /&amp;gt;
    &amp;lt;/h:panelGroup&amp;gt;
   &amp;lt;/h:panelGrid&amp;gt;
  &amp;lt;/h:form&amp;gt;
 &amp;lt;/ui:define&amp;gt;
&amp;lt;/ui:composition&amp;gt;
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2509844667593749835-1371052428586376628?l=jsf-tr.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/mWC4q6vNRHWSNUjAkl0wvXE9gSo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/mWC4q6vNRHWSNUjAkl0wvXE9gSo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/mWC4q6vNRHWSNUjAkl0wvXE9gSo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/mWC4q6vNRHWSNUjAkl0wvXE9gSo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/JavaserverFaces/~4/XzkYS3_bN_I" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jsf-tr.blogspot.com/feeds/1371052428586376628/comments/default" title="Kayıt Yorumları" /><link rel="replies" type="text/html" href="http://jsf-tr.blogspot.com/2010/08/ornek-proje-online-snav-12-sayfa.html#comment-form" title="2 Yorum" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2509844667593749835/posts/default/1371052428586376628?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2509844667593749835/posts/default/1371052428586376628?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JavaserverFaces/~3/XzkYS3_bN_I/ornek-proje-online-snav-12-sayfa.html" title="örnek proje : online sınav - 12 - Sayfa giriş/değişiklik" /><author><name>ibrahim demir</name><uri>http://www.blogger.com/profile/14063980678411736699</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="23" src="http://4.bp.blogspot.com/_ELhi79hYqkg/S1mqZHoY-NI/AAAAAAAAAFA/RV2hY7WhL7U/S220/id.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://jsf-tr.blogspot.com/2010/08/ornek-proje-online-snav-12-sayfa.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkMBRHgzeSp7ImA9Wx5SFkU.&quot;"><id>tag:blogger.com,1999:blog-2509844667593749835.post-3782931032606550882</id><published>2010-08-13T11:34:00.000+03:00</published><updated>2010-08-13T11:34:15.681+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-08-13T11:34:15.681+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Örnek Proje" /><title>örnek proje : online sınav - 11 - Rol giriş/değişiklik</title><content type="html">Rol listeleme giriş ve değişiklik işlemleleiri için : tablo, entity, bean ve sayfalar&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;ROLES&lt;/b&gt;&lt;br /&gt;
&lt;pre class="brush: sql;"&gt;&lt;
CREATE TABLE ROLES (
    ROLE_ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
    ROLE_CODE VARCHAR( 20 ) NOT NULL ,
    ROLE_DESC VARCHAR( 100 ) NOT NULL
) ENGINE = MYISAM ;
&lt;/pre&gt;

&lt;b&gt;Role.java&lt;/b&gt;
&lt;pre class="brush: java;"&gt;package entity;

import java.io.Serializable;

public class Role implements Serializable {

 private static final long serialVersionUID = -1869745073687894593L;
 private Integer id;
 private String code;
 private String desc;

 public Integer getId() {
  return id;
 }

 public void setId(Integer id) {
  this.id = id;
 }

 public String getCode() {
  return code;
 }

 public void setCode(String code) {
  this.code = code;
 }

 public String getDesc() {
  return desc;
 }

 public void setDesc(String desc) {
  this.desc = desc;
 }
}
&lt;/pre&gt;
&lt;b&gt;RoleDAO.java&lt;/b&gt;
&lt;pre class="brush: java;"&gt;package data;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import entity.Role;

public class RoleDAO implements Serializable {

 /**
  * 
  */
 private static final long serialVersionUID = 4783917742082486720L;
 private static String SQL_SELECT = "SELECT * FROM ROLES";
 private static String SQL_SELECT_BY_ID = "SELECT * FROM ROLES WHERE ROLE_ID = ?";
 private static String SQL_SELECT_BY_CODE = "SELECT * FROM ROLES WHERE ROLE_CODE = ?";
 private static String SQL_INSERT = "INSERT INTO ROLES VALUES(null, ?, ?)";
 private static String SQL_UPDATE = "UPDATE ROLES SET ROLE_CODE=?, ROLE_DESC=? WHERE ROLE_ID=?";

 private List&amp;lt;Role&amp;gt; getTable(String query, Object... values) {
  List&amp;lt;Role&amp;gt; table = new ArrayList&amp;lt;Role&amp;gt;();
  List&amp;lt;Map&amp;lt;String, Object&amp;gt;&amp;gt; data = DataAdapter.getData(query, values);
  for (int i = 0; i &amp;lt; data.size(); i++) {
   Map&amp;lt;String, Object&amp;gt; row = new HashMap&amp;lt;String, Object&amp;gt;();
   Role role = new Role();
   row = data.get(i);
   role.setId((Integer) row.get("ROLE_ID"));
   role.setCode((String) row.get("ROLE_CODE"));
   role.setDesc((String) row.get("ROLE_DESC"));
   table.add(role);
  }
  return table;
 }

 public List&amp;lt;Role&amp;gt; getRoles() {
  return getTable(SQL_SELECT);
 }

 public Role getRole(long id) {
  List&amp;lt;Role&amp;gt; roles = getTable(SQL_SELECT_BY_ID, id);
  if (roles.size() &amp;gt; 0) {
   return roles.get(0);
  } else {
   return null;
  }
 }

 public Role getRole(String code) {
  List&amp;lt;Role&amp;gt; roles = getTable(SQL_SELECT_BY_CODE, code);
  if (roles.size() &amp;gt; 0) {
   return roles.get(0);
  } else {
   return null;
  }
 }

 public void insert(Role role) {
  Object values[] = { role.getCode(), role.getDesc() };
  DataAdapter.persist(SQL_INSERT, values);
 }

 public void update(Role role) {
  Object values[] = { role.getCode(), role.getDesc(), role.getId() };
  DataAdapter.persist(SQL_UPDATE, values);
 }

}
&lt;/pre&gt;
&lt;b&gt;RoleList.java&lt;/b&gt;
&lt;pre class="brush: java;"&gt;package controller;

import java.io.Serializable;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

import data.RoleDAO;

import entity.Role;

@ManagedBean(name = "roleList")
@ViewScoped
public class RoleList implements Serializable {

 private static final long serialVersionUID = 1L;
 private List&amp;lt;Role&amp;gt; roles;

 public RoleList() {
  roles = new RoleDAO().getRoles();
 }

 public List&amp;lt;Role&amp;gt; getRoles() {
  return roles;
 }

 public void setRoles(List&amp;lt;Role&amp;gt; roles) {
  this.roles = roles;
 }
}
&lt;/pre&gt;
&lt;b&gt;roleList.xhtml&lt;/b&gt;
&lt;pre class="brush: xml;"&gt;&amp;lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&amp;gt;
&amp;lt;ui:composition xmlns="http://www.w3.org/1999/xhtml"
 xmlns:h="http://java.sun.com/jsf/html"
 xmlns:f="http://java.sun.com/jsf/core"
 xmlns:ui="http://java.sun.com/jsf/facelets"
 xmlns:fn="http://java.sun.com/jsp/jstl/functions"
 template="/resources/template.xhtml"&amp;gt;

 &amp;lt;ui:param name="title" value="Rol Listesi" /&amp;gt;
 &amp;lt;ui:define name="content"&amp;gt;
  &amp;lt;h:form prependId="false"&amp;gt;
   &amp;lt;h:button outcome="roleEdit.xhtml" value="Yeni Kayıt" /&amp;gt;

   &amp;lt;h:dataTable value="#{roleList.roles}" var="role"
    rendered="#{fn:length(roleList.roles)&amp;gt;0}"&amp;gt;
    &amp;lt;h:column&amp;gt;
     &amp;lt;f:facet name="header"&amp;gt;Id&amp;lt;/f:facet&amp;gt;
        #{role.id}
      &amp;lt;/h:column&amp;gt;
    &amp;lt;h:column&amp;gt;
     &amp;lt;f:facet name="header"&amp;gt;Kod&amp;lt;/f:facet&amp;gt;
        #{role.code}
      &amp;lt;/h:column&amp;gt;
    &amp;lt;h:column&amp;gt;
     &amp;lt;f:facet name="header"&amp;gt;Tanım&amp;lt;/f:facet&amp;gt;
        #{role.desc}
      &amp;lt;/h:column&amp;gt;
    &amp;lt;h:column&amp;gt;
     &amp;lt;f:facet name="header"&amp;gt;İşlem&amp;lt;/f:facet&amp;gt;
     &amp;lt;h:link outcome="roleEdit.xhtml?faces-redirect=true"
      value="Düzenle"&amp;gt;
      &amp;lt;f:param name="id" value="#{role.id}" /&amp;gt;
     &amp;lt;/h:link&amp;gt;
    &amp;lt;/h:column&amp;gt;

   &amp;lt;/h:dataTable&amp;gt;
  &amp;lt;/h:form&amp;gt;

 &amp;lt;/ui:define&amp;gt;
&amp;lt;/ui:composition&amp;gt;
&lt;/pre&gt;
&lt;b&gt;RoleEdit.java&lt;/b&gt;
&lt;pre class="brush: java;"&gt;package controller;

import java.io.Serializable;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

import util.FacesUtil;
import data.RoleDAO;
import entity.Role;

@ManagedBean(name = "roleEdit")
@ViewScoped
public class RoleEdit implements Serializable {

 private static final long serialVersionUID = 1L;
 private Role role = new Role();
 private RoleDAO roleDAO = new RoleDAO();

 public RoleEdit() {
  if (FacesUtil.getRequestParameter("id") != null) {
   int id = Integer.parseInt(FacesUtil.getRequestParameter("id"));
   role = roleDAO.getRole(id);
  }
 }

 public Role getRole() {
  return role;
 }

 public void setRole(Role role) {
  this.role = role;
 }

 public String save() {
  if (control()) {
   if (role.getId() == null || role.getId() == 0)
    roleDAO.insert(role);
   else
    roleDAO.update(role);
   return "roleList.xhtml?faces-redirect=true";
  }
  return null;
 }

 public boolean control() {
  if (role.getId() != null &amp;&amp; role.getId() &amp;gt; 0) {
   Role dbRole = roleDAO.getRole(role.getCode());
   if (dbRole != null &amp;&amp; (role.getId() != dbRole.getId())) {
    FacesUtil.addMessage("Rol kodu daha önce kullanılmış",
      FacesMessage.SEVERITY_ERROR);
    return false;
   }
  }
  return true;
 }
}
&lt;/pre&gt;
&lt;b&gt;roleEdit.xhtml&lt;/b&gt;
&lt;pre class="brush: xml;"&gt;&amp;lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&amp;gt;
&amp;lt;ui:composition xmlns="http://www.w3.org/1999/xhtml"
 xmlns:h="http://java.sun.com/jsf/html"
 xmlns:f="http://java.sun.com/jsf/core"
 xmlns:ui="http://java.sun.com/jsf/facelets"
 xmlns:fn="http://java.sun.com/jsp/jstl/functions"
 template="/resources/template.xhtml"&amp;gt;

 &amp;lt;ui:param name="title" value="Rol Giriş/Düzenle" /&amp;gt;
 &amp;lt;ui:define name="content"&amp;gt;
  &amp;lt;h:form prependId="false"&amp;gt;
   &amp;lt;h:panelGrid columns="2" styleClass="dataform"&amp;gt;
    &amp;lt;h:outputText value="Kod" /&amp;gt;
    &amp;lt;h:inputText value="#{roleEdit.role.code}" required="true"
     requiredMessage="Kod alanı boş geçilemez..." /&amp;gt;
    &amp;lt;h:outputText value="Tanım" /&amp;gt;
    &amp;lt;h:inputText value="#{roleEdit.role.desc}" required="true"
     requiredMessage="Tanım alanı boş geçilemez..." /&amp;gt;
    &amp;lt;h:panelGroup /&amp;gt;
    &amp;lt;h:panelGroup&amp;gt;
     &amp;lt;h:commandButton action="#{roleEdit.save}" value="Kaydet" /&amp;gt;
     #{' '}
     &amp;lt;h:button outcome="roleList.xhtml?faces-redirect=true"
      value="Vazgeç" /&amp;gt;
    &amp;lt;/h:panelGroup&amp;gt;
   &amp;lt;/h:panelGrid&amp;gt;
  &amp;lt;/h:form&amp;gt;
 &amp;lt;/ui:define&amp;gt;
&amp;lt;/ui:composition&amp;gt;
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2509844667593749835-3782931032606550882?l=jsf-tr.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/mCslyBGkwT35nG7prgAVnC4eR3E/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/mCslyBGkwT35nG7prgAVnC4eR3E/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/mCslyBGkwT35nG7prgAVnC4eR3E/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/mCslyBGkwT35nG7prgAVnC4eR3E/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/JavaserverFaces/~4/lx2mFZdVn8I" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jsf-tr.blogspot.com/feeds/3782931032606550882/comments/default" title="Kayıt Yorumları" /><link rel="replies" type="text/html" href="http://jsf-tr.blogspot.com/2010/08/ornek-proje-online-snav-11-rol.html#comment-form" title="0 Yorum" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2509844667593749835/posts/default/3782931032606550882?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2509844667593749835/posts/default/3782931032606550882?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JavaserverFaces/~3/lx2mFZdVn8I/ornek-proje-online-snav-11-rol.html" title="örnek proje : online sınav - 11 - Rol giriş/değişiklik" /><author><name>ibrahim demir</name><uri>http://www.blogger.com/profile/14063980678411736699</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="23" src="http://4.bp.blogspot.com/_ELhi79hYqkg/S1mqZHoY-NI/AAAAAAAAAFA/RV2hY7WhL7U/S220/id.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://jsf-tr.blogspot.com/2010/08/ornek-proje-online-snav-11-rol.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkIGRXo5cSp7ImA9Wx5SFkU.&quot;"><id>tag:blogger.com,1999:blog-2509844667593749835.post-3943196818783458268</id><published>2010-08-13T10:13:00.004+03:00</published><updated>2010-08-13T11:35:24.429+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-08-13T11:35:24.429+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Örnek Proje" /><title>örnek proje : online sınav - 10 -  Kullanıcı giriş/değişiklik</title><content type="html">Projemizde login kontorlü phaselistener ile sağlanacak. Ayrıca sayfa içerisindeki kontroller ve sayfalara erişimler role bazında olacak. Bu nedenle her sayfa içinde bir role ataması yapacağız. Bu roller kullanıcılar ile atanarak erişim kontorlü yapılacak.&lt;br /&gt;
&lt;br /&gt;
Şimdi kullanıcı giriş ve değişiklik sayfasını yaratalım. Kullanıcı dosyasını oluşturan sql'i daha önce yazmıştık ancak tekrar etmekte fayda var.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;USERS&lt;/b&gt;&lt;br /&gt;
&lt;pre class="brush: sql;"&gt;CREATE TABLE USERS (
  USER_ID int(11) NOT NULL AUTO_INCREMENT,
  USERNAME varchar(50) NOT NULL,
  PASSWORD varchar(50) NOT NULL,
  FULLNAME varchar(100) NOT NULL,
  PRIMARY KEY (USER_ID)
) ENGINE=MyISAM ;
&lt;/pre&gt;&lt;br /&gt;
&lt;b&gt;User.java&lt;/b&gt;&lt;br /&gt;
&lt;pre class="brush: java;"&gt;package entity;

import java.io.Serializable;

public class User implements Serializable {

 private static final long serialVersionUID = -8989632791469153443L;
 private Integer id;
 private String username;
 private String password;
 private String name;

 public Integer getId() {
  return id;
 }

 public void setId(Integer id) {
  this.id = id;
 }

 public String getUsername() {
  return username;
 }

 public void setUsername(String username) {
  this.username = username;
 }

 public String getPassword() {
  return password;
 }

 public void setPassword(String password) {
  this.password = password;
 }

 public String getName() {
  return name;
 }

 public void setName(String name) {
  this.name = name;
 }
}
&lt;/pre&gt;&lt;br /&gt;
&lt;b&gt;UserDAO.java&lt;/b&gt;&lt;br /&gt;
&lt;pre class="brush: java;"&gt;package data;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import entity.User;

public class UserDAO implements Serializable {

 /**
  * 
  */
 private static final long serialVersionUID = 4783917742082486720L;
 private static String SQL_SELECT = "SELECT * FROM USERS";
 private static String SQL_SELECT_BY_ID = "SELECT * FROM USERS WHERE USER_ID = ?";
 private static String SQL_SELECT_BY_USERNAME = "SELECT * FROM USERS WHERE USERNAME = ?";
 private static String SQL_INSERT = "INSERT INTO USERS VALUES(null, ?, ?, ?)";
 private static String SQL_UPDATE = "UPDATE USERS SET USERNAME=?, PASSWORD=?, FULLNAME=? WHERE USER_ID=?";

 private List&amp;lt;User&amp;gt; getTable(String query, Object... values) {
  List&amp;lt;User&amp;gt; table = new ArrayList&amp;lt;User&amp;gt;();
  List&amp;lt;Map&amp;lt;String, Object&amp;gt;&amp;gt; data = DataAdapter.getData(query, values);
  for (int i = 0; i &amp;lt; data.size(); i++) {
   Map&amp;lt;String, Object&amp;gt; row = new HashMap&amp;lt;String, Object&amp;gt;();
   User user = new User();
   row = data.get(i);
   user.setId((Integer) row.get("USER_ID"));
   user.setUsername((String) row.get("USERNAME"));
   user.setPassword((String) row.get("PASSWORD"));
   user.setName((String) row.get("FULLNAME"));
   table.add(user);
  }
  return table;
 }

 public List&amp;lt;User&amp;gt; getUsers() {
  return getTable(SQL_SELECT);
 }

 public User getUser(long id) {
  List&amp;lt;User&amp;gt; users = getTable(SQL_SELECT_BY_ID, id);
  if (users.size() &amp;gt; 0) {
   return users.get(0);
  } else {
   return null;
  }
 }

 public User getUser(String username) {
  List&amp;lt;User&amp;gt; users = getTable(SQL_SELECT_BY_USERNAME, username);
  if (users.size() &amp;gt; 0) {
   return users.get(0);
  } else {
   return null;
  }
 }

 public void insert(User user) {
  Object values[] = { user.getUsername(), user.getPassword(),
    user.getName() };
  DataAdapter.persist(SQL_INSERT, values);
 }

 public void update(User user) {
  Object values[] = { user.getUsername(), user.getPassword(),
    user.getName(), user.getId() };
  DataAdapter.persist(SQL_UPDATE, values);
 }
}
&lt;/pre&gt;&lt;br /&gt;
&lt;b&gt;UserList.java&lt;/b&gt;&lt;br /&gt;
&lt;pre class="brush: java;"&gt;package controller;

import java.io.Serializable;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

import data.UserDAO;

import entity.User;

@ManagedBean(name = "userList")
@ViewScoped
public class UserList implements Serializable {

 private static final long serialVersionUID = 1L;
 private List&amp;lt;User&amp;gt; users;

 public UserList() {
  users = new UserDAO().getUsers();
 }

 public List&amp;lt;User&amp;gt; getUsers() {
  return users;
 }

 public void setUsers(List&amp;lt;User&amp;gt; users) {
  this.users = users;
 }
}
&lt;/pre&gt;&lt;br /&gt;
&lt;b&gt;userList.xhtml&lt;/b&gt;&lt;br /&gt;
&lt;pre class="brush: xml;"&gt;&amp;lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&amp;gt;
&amp;lt;ui:composition xmlns="http://www.w3.org/1999/xhtml"
 xmlns:h="http://java.sun.com/jsf/html"
 xmlns:f="http://java.sun.com/jsf/core"
 xmlns:ui="http://java.sun.com/jsf/facelets"
 xmlns:fn="http://java.sun.com/jsp/jstl/functions"
 template="/resources/template.xhtml"&amp;gt;

 &amp;lt;ui:param name="title" value="Kullanıcı Listesi" /&amp;gt;
 &amp;lt;ui:define name="content"&amp;gt;
  &amp;lt;h:form prependId="false"&amp;gt;
   &amp;lt;h:button outcome="userEdit.xhtml" value="Yeni Kayıt" /&amp;gt;

   &amp;lt;h:dataTable value="#{userList.users}" var="user"
    rendered="#{fn:length(userList.users)&amp;gt;0}"&amp;gt;
    &amp;lt;h:column&amp;gt;
     &amp;lt;f:facet name="header"&amp;gt;Id&amp;lt;/f:facet&amp;gt;
        #{user.id}
      &amp;lt;/h:column&amp;gt;
    &amp;lt;h:column&amp;gt;
     &amp;lt;f:facet name="header"&amp;gt;Kullanıcı&amp;lt;/f:facet&amp;gt;
        #{user.username}
      &amp;lt;/h:column&amp;gt;
    &amp;lt;h:column&amp;gt;
     &amp;lt;f:facet name="header"&amp;gt;Şifre&amp;lt;/f:facet&amp;gt;
        #{user.password}
      &amp;lt;/h:column&amp;gt;
    &amp;lt;h:column&amp;gt;
     &amp;lt;f:facet name="header"&amp;gt;Ad - Soyad&amp;lt;/f:facet&amp;gt;
        #{user.name}
      &amp;lt;/h:column&amp;gt;
    &amp;lt;h:column&amp;gt;
     &amp;lt;f:facet name="header"&amp;gt;İşlem&amp;lt;/f:facet&amp;gt;
     &amp;lt;h:link outcome="userEdit.xhtml?faces-redirect=true"
      value="Düzenle"&amp;gt;
      &amp;lt;f:param name="id" value="#{user.id}" /&amp;gt;
     &amp;lt;/h:link&amp;gt;
    &amp;lt;/h:column&amp;gt;

   &amp;lt;/h:dataTable&amp;gt;
  &amp;lt;/h:form&amp;gt;

 &amp;lt;/ui:define&amp;gt;
&amp;lt;/ui:composition&amp;gt;
&lt;/pre&gt;&lt;br /&gt;
&lt;b&gt;UserEdit.java&lt;/b&gt;&lt;br /&gt;
&lt;pre class="brush: java;"&gt;package controller;

import java.io.Serializable;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

import util.FacesUtil;
import data.UserDAO;
import entity.User;

@ManagedBean(name = "userEdit")
@ViewScoped
public class UserEdit implements Serializable {

 private static final long serialVersionUID = 1L;
 private User user = new User();
 private UserDAO userDAO = new UserDAO();

 public UserEdit() {
  if (FacesUtil.getRequestParameter("id") != null) {
   int id = Integer.parseInt(FacesUtil.getRequestParameter("id"));
   user = userDAO.getUser(id);
  }
 }

 public User getUser() {
  return user;
 }

 public void setUser(User user) {
  this.user = user;
 }

 public String save() {
  if (control()) {
   if (user.getId() == null || user.getId() == 0)
    userDAO.insert(user);
   else
    userDAO.update(user);
   return "userList.xhtml?faces-redirect=true";
  }
  return null;
 }

 public boolean control() {
  if (user.getId() != null &amp;&amp; user.getId() &amp;gt; 0) {
   User dbUser = userDAO.getUser(user.getUsername());
   if (dbUser != null &amp;&amp; (user.getId() != dbUser.getId())) {
    FacesUtil.addMessage("Kullanıcı adı daha önce kullanılmış",
      FacesMessage.SEVERITY_ERROR);
    return false;
   }
  }
  return true;
 }
}
&lt;/pre&gt;&lt;br /&gt;
&lt;b&gt;userEdit.xhtml&lt;/b&gt;&lt;br /&gt;
&lt;pre class="brush: xml;"&gt;&amp;lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&amp;gt;
&amp;lt;ui:composition xmlns="http://www.w3.org/1999/xhtml"
 xmlns:h="http://java.sun.com/jsf/html"
 xmlns:f="http://java.sun.com/jsf/core"
 xmlns:ui="http://java.sun.com/jsf/facelets"
 xmlns:fn="http://java.sun.com/jsp/jstl/functions"
 template="/resources/template.xhtml"&amp;gt;

 &amp;lt;ui:param name="title" value="Kullanıcı Giriş/Düzenle" /&amp;gt;
 &amp;lt;ui:define name="content"&amp;gt;
  &amp;lt;h:form prependId="false"&amp;gt;
   &amp;lt;h:panelGrid columns="2"&amp;gt;
    &amp;lt;h:outputText value="Kullanıcı" /&amp;gt;
    &amp;lt;h:inputText value="#{userEdit.user.username}" required="true"
     requiredMessage="Kullanıcı alanı boş geçilemez..." /&amp;gt;
    &amp;lt;h:outputText value="Şifre" /&amp;gt;
    &amp;lt;h:inputText value="#{userEdit.user.password}" required="true"
     requiredMessage="Şifre alanı boş geçilemez..." /&amp;gt;
    &amp;lt;h:outputText value="Ad - Soyad" /&amp;gt;
    &amp;lt;h:inputText value="#{userEdit.user.name}" required="true"
     requiredMessage="Ad alanı boş geçelemez..." /&amp;gt;
    &amp;lt;h:panelGroup /&amp;gt;
    &amp;lt;h:panelGroup&amp;gt;
     &amp;lt;h:commandButton action="#{userEdit.save}" value="Kaydet" /&amp;gt;
     #{' '}
     &amp;lt;h:button outcome="userList.xhtml?faces-redirect=true"
      value="Vazgeç" /&amp;gt;
    &amp;lt;/h:panelGroup&amp;gt;
   &amp;lt;/h:panelGrid&amp;gt;
  &amp;lt;/h:form&amp;gt;
 &amp;lt;/ui:define&amp;gt;
&amp;lt;/ui:composition&amp;gt;
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2509844667593749835-3943196818783458268?l=jsf-tr.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/zrL7myEh_g01tO_cw-ltN3eUJCw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/zrL7myEh_g01tO_cw-ltN3eUJCw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/zrL7myEh_g01tO_cw-ltN3eUJCw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/zrL7myEh_g01tO_cw-ltN3eUJCw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/JavaserverFaces/~4/2HDrIK_cJ4w" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jsf-tr.blogspot.com/feeds/3943196818783458268/comments/default" title="Kayıt Yorumları" /><link rel="replies" type="text/html" href="http://jsf-tr.blogspot.com/2010/08/ornek-proje-online-snav-10-kullanc.html#comment-form" title="2 Yorum" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2509844667593749835/posts/default/3943196818783458268?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2509844667593749835/posts/default/3943196818783458268?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JavaserverFaces/~3/2HDrIK_cJ4w/ornek-proje-online-snav-10-kullanc.html" title="örnek proje : online sınav - 10 -  Kullanıcı giriş/değişiklik" /><author><name>ibrahim demir</name><uri>http://www.blogger.com/profile/14063980678411736699</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="23" src="http://4.bp.blogspot.com/_ELhi79hYqkg/S1mqZHoY-NI/AAAAAAAAAFA/RV2hY7WhL7U/S220/id.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://jsf-tr.blogspot.com/2010/08/ornek-proje-online-snav-10-kullanc.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUANQnY7cCp7ImA9Wx5SFk0.&quot;"><id>tag:blogger.com,1999:blog-2509844667593749835.post-5889062243925892749</id><published>2010-08-12T11:08:00.002+03:00</published><updated>2010-08-12T12:03:13.808+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-08-12T12:03:13.808+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Örnek Proje" /><title>örnek proje : online sınav - 09 - Sınav değerlendirme ve sonuç listeleme</title><content type="html">Sınav sonuçlarını değerlendirmek için bir tane entity yaratacağım ancak bu entity'nin veri tabanında bir karşılığı yok. Sadece veriyi okuyabilmek için kullanıyorum.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;EvalExam.java&lt;/b&gt;&lt;br /&gt;
&lt;pre class="brush: java;"&gt;package entity;

import java.io.Serializable;

public class EvalExam implements Serializable {

 private static final long serialVersionUID = 1L;
 private UserAnswer answer;
 private String correctAnswer;

 public UserAnswer getAnswer() {
  return answer;
 }

 public void setAnswer(UserAnswer answer) {
  this.answer = answer;
 }

 public String getCorrectAnswer() {
  return correctAnswer;
 }

 public void setCorrectAnswer(String correctAnswer) {
  this.correctAnswer = correctAnswer;
 }
}
&lt;/pre&gt;&lt;br /&gt;
Bu entity'yi doldurabilmek için DAO yazalım&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;EvalExamDAO.java&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: java;"&gt;package data;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import entity.EvalExam;
import entity.UserAnswer;

public class EvalExamDAO implements Serializable {

 private static final long serialVersionUID = 1L;
 private static String SQL_SELECT_BY_EXAM_AND_USER = "SELECT B.* , A.CORRECT_CHC "
   + " FROM QUESTIONS A INNER JOIN USER_ANSWERS B "
   + " ON A.EXAM_ID = B.EXAM_ID AND A.QUEST_ID = B.QUEST_ID "
   + " WHERE B.EXAM_ID=? AND B.USER_ID=?";

 private List&amp;lt;EvalExam&amp;gt; getTable(String query, Object... values) {
  List&amp;lt;EvalExam&amp;gt; table = new ArrayList&amp;lt;EvalExam&amp;gt;();
  List&amp;lt;Map&amp;lt;String, Object&amp;gt;&amp;gt; data = DataAdapter.getData(query, values);
  for (int i = 0; i &amp;lt; data.size(); i++) {
   Map&amp;lt;String, Object&amp;gt; row = new HashMap&amp;lt;String, Object&amp;gt;();
   EvalExam eval = new EvalExam();
   row = data.get(i);
   UserAnswer answer = new UserAnswer();
   answer.setExamId((Integer) row.get("EXAM_ID"));
   answer.setUserId((Integer) row.get("USER_ID"));
   answer.setQuestionId((Integer) row.get("QUEST_ID"));
   answer.setAnswer((String) row.get("ANSWER"));
   eval.setAnswer(answer);
   eval.setCorrectAnswer((String) row.get("CORRECT_CHC"));
   table.add(eval);
  }
  return table;
 }

 public List&amp;lt;EvalExam&amp;gt; getEvalExamByExamAndUser(int examId, int userId) {
  return this.getTable(SQL_SELECT_BY_EXAM_AND_USER, examId, userId);
 }

}
&lt;/pre&gt;&lt;br /&gt;
ve değerlendirmeye uygun olan sınavları listeyebilmek için ExamDAO'ya yeni bir method ekleyelim.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: java;"&gt;private static String SQL_SELECT_EVAL = "SELECT * FROM EXAMS WHERE EXAM_STS IN ('STARTED','EVAL')";

 public List&amp;lt;Exam&amp;gt; getEvalExams() {
  return this.getTable(SQL_SELECT_EVAL);
 }
&lt;/pre&gt;&lt;br /&gt;
Değerledireceğimiz sınavları görüntüleyebilmek için bean'mizi ve sayfamızı yazalım&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;EvalExam.java&lt;/b&gt;&lt;br /&gt;
&lt;pre class="brush: java;"&gt;package controller;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.event.ActionEvent;

import util.FacesUtil;

import data.EvalExamDAO;
import data.ExamDAO;
import data.UserExamDAO;
import entity.EvalExam;
import entity.Exam;
import entity.UserExam;

@ManagedBean(name = "examEval")
@ViewScoped
public class ExamEval implements Serializable {

 private static final long serialVersionUID = 1L;
 private List&amp;lt;Exam&amp;gt; exams = new ArrayList&amp;lt;Exam&amp;gt;();
 public ExamDAO examDAO = new ExamDAO();

 public ExamEval() {
  exams = examDAO.getEvalExams();
 }

 public List&amp;lt;Exam&amp;gt; getExams() {
  return exams;
 }

 public void setExams(List&amp;lt;Exam&amp;gt; exams) {
  this.exams = exams;
 }

 public void evaluate(ActionEvent event) {
  Exam exam = (Exam) event.getComponent().getAttributes().get("exam");
  UserExamDAO userExamDAO = new UserExamDAO();
  List&amp;lt;UserExam&amp;gt; userExams = userExamDAO.getExamsByExam(exam.getId());
  for (UserExam userExam : userExams) {
   List&amp;lt;EvalExam&amp;gt; evalExams = new EvalExamDAO()
     .getEvalExamByExamAndUser(exam.getId(), userExam
       .getUserId());
   int corrects = 0;
   int faults = 0;
   int empties = 0;
   for (EvalExam evalExam : evalExams) {
    if (evalExam.getAnswer().getAnswer().trim().length() == 0)
     empties++;
    else if (evalExam.getAnswer().getAnswer().equals(
      evalExam.getCorrectAnswer()))
     corrects++;
    else
     faults++;

   }

   int result = (corrects * 100) / (corrects + faults + empties);
   userExam.setCorrects(corrects);
   userExam.setFaults(faults);
   userExam.setEmpties(empties);
   userExam.setScore(result);
   userExamDAO.update(userExam);

  }
  exam.setStatus("EVAL");
  new ExamDAO().update(exam);
  FacesUtil.addMessage("Değerledirme işlemi tamamlandı",
    FacesMessage.SEVERITY_INFO);
 }
}
&lt;/pre&gt;&lt;br /&gt;
&lt;b&gt;examEval.xhtml&lt;/b&gt;&lt;br /&gt;
&lt;pre class="brush: xml;"&gt;&amp;lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&amp;gt;
&amp;lt;ui:composition xmlns="http://www.w3.org/1999/xhtml"
 xmlns:h="http://java.sun.com/jsf/html"
 xmlns:f="http://java.sun.com/jsf/core"
 xmlns:ui="http://java.sun.com/jsf/facelets"
 xmlns:fn="http://java.sun.com/jsp/jstl/functions"
 template="/resources/template.xhtml"&amp;gt;

 &amp;lt;ui:param name="title" value="Sınav Değerlendirme" /&amp;gt;
 &amp;lt;ui:define name="content"&amp;gt;
  &amp;lt;h:form prependId="false"&amp;gt;
   &amp;lt;h:dataTable value="#{examEval.exams}" var="exam"
    rendered="#{fn:length(examEval.exams)&amp;gt;0}"&amp;gt;
    &amp;lt;h:column&amp;gt;
     &amp;lt;f:facet name="header"&amp;gt;Id&amp;lt;/f:facet&amp;gt;
        #{exam.id}
      &amp;lt;/h:column&amp;gt;
    &amp;lt;h:column&amp;gt;
     &amp;lt;f:facet name="header"&amp;gt;Sınav No&amp;lt;/f:facet&amp;gt;
        #{exam.no}
      &amp;lt;/h:column&amp;gt;
    &amp;lt;h:column&amp;gt;
     &amp;lt;f:facet name="header"&amp;gt;Tanım&amp;lt;/f:facet&amp;gt;
        #{exam.desc}
      &amp;lt;/h:column&amp;gt;
    &amp;lt;h:column&amp;gt;
     &amp;lt;f:facet name="header"&amp;gt;Durum&amp;lt;/f:facet&amp;gt;
        #{exam.status}
      &amp;lt;/h:column&amp;gt;
    &amp;lt;h:column&amp;gt;
     &amp;lt;f:facet name="header"&amp;gt;İşlem&amp;lt;/f:facet&amp;gt;
     &amp;lt;h:commandLink actionListener="#{examEval.evaluate}"
      value="Değerlendir"&amp;gt;
      &amp;lt;f:attribute name="exam" value="#{exam}" /&amp;gt;
     &amp;lt;/h:commandLink&amp;gt;
    &amp;lt;/h:column&amp;gt;

   &amp;lt;/h:dataTable&amp;gt;
  &amp;lt;/h:form&amp;gt;

 &amp;lt;/ui:define&amp;gt;
&amp;lt;/ui:composition&amp;gt;
&lt;/pre&gt;&lt;br /&gt;
Sınav değerlendirme tamam şimdide sınav sonuçlarını görüntüleyelim&lt;br /&gt;
&lt;br /&gt;
Bunun için UserExamDAO'ya aşağıdaki method'u ekleyelim&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: java;"&gt;private static String SQL_SELECT_RESULTS_BY_USER = "SELECT * FROM VW_USER_EXAMS "
   + " WHERE USER_ID=? AND EXAM_STS='COMPLETE' ";
 public List&amp;lt;UserExam&amp;gt; getResultsByUserId(Integer userId) {
  return this.getTable(SQL_SELECT_RESULTS_BY_USER, userId);
 }
&lt;/pre&gt;&lt;br /&gt;
&lt;b&gt;ExamResult.java&lt;/b&gt;&lt;br /&gt;
&lt;pre class="brush: java;"&gt;package controller;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

import data.UserExamDAO;
import entity.UserExam;

@ManagedBean(name = "examResult")
@ViewScoped
public class ExamResult implements Serializable {

 private static final long serialVersionUID = 1L;
 private List&amp;lt;UserExam&amp;gt; results = new ArrayList&amp;lt;UserExam&amp;gt;();

 public ExamResult() {
  results = new UserExamDAO().getResultsByUserId(1);
 }

 public List&amp;lt;UserExam&amp;gt; getResults() {
  return results;
 }

 public void setResults(List&amp;lt;UserExam&amp;gt; results) {
  this.results = results;
 }

}
&lt;/pre&gt;&lt;br /&gt;
&lt;b&gt;examResults.xhtml&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: xml;"&gt;&amp;lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&amp;gt;
&amp;lt;ui:composition xmlns="http://www.w3.org/1999/xhtml"
 xmlns:h="http://java.sun.com/jsf/html"
 xmlns:f="http://java.sun.com/jsf/core"
 xmlns:ui="http://java.sun.com/jsf/facelets"
 xmlns:fn="http://java.sun.com/jsp/jstl/functions"
 template="/resources/template.xhtml"&amp;gt;

 &amp;lt;ui:param name="title" value="Sınav Sonuçları" /&amp;gt;
 &amp;lt;ui:define name="content"&amp;gt;
  &amp;lt;h:form prependId="false"&amp;gt;


   &amp;lt;h:dataTable value="#{examResult.results}" var="result"
    rendered="#{fn:length(examResult.results)&amp;gt;0}"&amp;gt;
    &amp;lt;h:column&amp;gt;
     &amp;lt;f:facet name="header"&amp;gt;Id&amp;lt;/f:facet&amp;gt;
        #{result.exam.id}
      &amp;lt;/h:column&amp;gt;
    &amp;lt;h:column&amp;gt;
     &amp;lt;f:facet name="header"&amp;gt;Sınav No&amp;lt;/f:facet&amp;gt;
        #{result.exam.no}
      &amp;lt;/h:column&amp;gt;
    &amp;lt;h:column&amp;gt;
     &amp;lt;f:facet name="header"&amp;gt;Tanım&amp;lt;/f:facet&amp;gt;
        #{result.exam.desc}
      &amp;lt;/h:column&amp;gt;
    &amp;lt;h:column&amp;gt;
     &amp;lt;f:facet name="header"&amp;gt;Doğru&amp;lt;/f:facet&amp;gt;
        #{result.corrects}
      &amp;lt;/h:column&amp;gt;
    &amp;lt;h:column&amp;gt;
     &amp;lt;f:facet name="header"&amp;gt;Yanlış&amp;lt;/f:facet&amp;gt;
        #{result.faults}
      &amp;lt;/h:column&amp;gt;
    &amp;lt;h:column&amp;gt;
     &amp;lt;f:facet name="header"&amp;gt;Boş&amp;lt;/f:facet&amp;gt;
        #{result.empties}
      &amp;lt;/h:column&amp;gt;
    &amp;lt;h:column&amp;gt;
     &amp;lt;f:facet name="header"&amp;gt;Sonuç&amp;lt;/f:facet&amp;gt;
        #{result.score}
      &amp;lt;/h:column&amp;gt;
   &amp;lt;/h:dataTable&amp;gt;
  &amp;lt;/h:form&amp;gt;

 &amp;lt;/ui:define&amp;gt;
&amp;lt;/ui:composition&amp;gt;
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2509844667593749835-5889062243925892749?l=jsf-tr.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/T_d5R80pPDN4rHSgbJrO3HiIjaY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/T_d5R80pPDN4rHSgbJrO3HiIjaY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/T_d5R80pPDN4rHSgbJrO3HiIjaY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/T_d5R80pPDN4rHSgbJrO3HiIjaY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/JavaserverFaces/~4/xjux1pXGnFc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jsf-tr.blogspot.com/feeds/5889062243925892749/comments/default" title="Kayıt Yorumları" /><link rel="replies" type="text/html" href="http://jsf-tr.blogspot.com/2010/08/ornek-proje-online-snav-snav.html#comment-form" title="0 Yorum" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2509844667593749835/posts/default/5889062243925892749?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2509844667593749835/posts/default/5889062243925892749?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JavaserverFaces/~3/xjux1pXGnFc/ornek-proje-online-snav-snav.html" title="örnek proje : online sınav - 09 - Sınav değerlendirme ve sonuç listeleme" /><author><name>ibrahim demir</name><uri>http://www.blogger.com/profile/14063980678411736699</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="23" src="http://4.bp.blogspot.com/_ELhi79hYqkg/S1mqZHoY-NI/AAAAAAAAAFA/RV2hY7WhL7U/S220/id.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://jsf-tr.blogspot.com/2010/08/ornek-proje-online-snav-snav.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEUERHY5fCp7ImA9Wx5SFUw.&quot;"><id>tag:blogger.com,1999:blog-2509844667593749835.post-738283415076043505</id><published>2010-08-10T19:12:00.047+03:00</published><updated>2010-08-11T11:43:25.824+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-08-11T11:43:25.824+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Örnek Proje" /><title>örnek proje : online sınav - 08 - Sınav cevaplama</title><content type="html">Sınavları cevaplayabilmek için bir kaç tabloya ihtiyacımız var.&lt;br /&gt;
Kullanıcı, kullanıcıya ait sınavlar, sınav cevapları için birer tablo yaratalım&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: sql;"&gt;CREATE TABLE USERS (
  USER_ID int(11) NOT NULL AUTO_INCREMENT,
  USERNAME varchar(50) NOT NULL,
  PASSWORD varchar(50) NOT NULL,
  FULLNAME varchar(100) NOT NULL,
  PRIMARY KEY (USER_ID)
) ENGINE=MyISAM ;
&lt;/pre&gt;&lt;br /&gt;
&lt;pre class="brush: sql;"&gt;CREATE TABLE USER_EXAMS (
  USER_ID int(11) NOT NULL,
  EXAM_ID int(11) NOT NULL,
  UE_STS varchar(10) NOT NULL,
  UE_COR int(11) NOT NULL,
  UE_FLT int(11) NOT NULL,
  UE_EMP int(11) NOT NULL,
  UE_RES int(11) NOT NULL,
  UNIQUE KEY USER_EXAM_ID (USER_ID,EXAM_ID)
) ENGINE=MyISAM;
&lt;/pre&gt;&lt;br /&gt;
&lt;pre class="brush: sql;"&gt;CREATE TABLE USER_ANSWERS (
  USER_ID int(11) NOT NULL,
  EXAM_ID int(11) NOT NULL,
  QUEST_ID int(11) NOT NULL,
  ANSWER varchar(1) NOT NULL,
  PRIMARY KEY (USER_ID,EXAM_ID,QUEST_ID)
) ENGINE=MyISAM;
&lt;/pre&gt;&lt;pre class="brush: sql;"&gt;CREATE VIEW VW_USER_EXAMS AS 
    SELECT A.*, 
           IFNULL(B.USER_ID,0) AS USER_ID,
           IFNULL(B.UE_STS,'NEW') AS UE_STS, 
           IFNULL(B.UE_COR,0) AS UE_COR,
           IFNULL(B.UE_FLT,0) AS UE_FLT, 
           IFNULL(B.UE_EMP,0) AS UE_EMP,
           IFNULL(B.UE_RES,0) AS UE_RES 
      FROM EXAMS A 
           LEFT OUTER JOIN USER_EXAMS B 
           ON A.EXAM_ID=B.EXAM_ID
&lt;/pre&gt;&lt;br /&gt;
Şimdi açık sınavları listelemek için entity, DAO , bean ve bir sayfa yapalım.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: java;"&gt;package entity;

import java.io.Serializable;

public class UserExam implements Serializable {

 private static final long serialVersionUID = 1L;
 private int userId;
 private Exam exam;
 private int corrects;
 private int faults;
 private int empties;
 private int score;
 private String status;

 public int getUserId() {
  return userId;
 }

 public void setUserId(int userId) {
  this.userId = userId;
 }

 public Exam getExam() {
  return exam;
 }

 public void setExam(Exam exam) {
  this.exam = exam;
 }

 public String getStatus() {
  return status;
 }

 public void setStatus(String status) {
  this.status = status;
 }

 public int getCorrects() {
  return corrects;
 }

 public void setCorrects(int corrects) {
  this.corrects = corrects;
 }

 public int getFaults() {
  return faults;
 }

 public void setFaults(int faults) {
  this.faults = faults;
 }

 public int getEmpties() {
  return empties;
 }

 public void setEmpties(int empties) {
  this.empties = empties;
 }

 public int getScore() {
  return score;
 }

 public void setScore(int score) {
  this.score = score;
 }

}
&lt;/pre&gt;&lt;br /&gt;
&lt;pre class="brush: java;"&gt;package data;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import entity.Exam;
import entity.UserExam;

public class UserExamDAO implements Serializable {

 private static final long serialVersionUID = 1L;
 private static String SQL_SELECT_OPENS_BY_USER = "SELECT * FROM VW_USER_EXAMS "
   + " WHERE (USER_ID=? or USER_ID=0) AND EXAM_STS='STARTED' "
   + " AND (UE_STS ='NEW' OR UE_STS='STARTED')";
 private String SQL_EXISTS = "SELECT * FROM USER_EXAMS WHERE USER_ID=? AND EXAM_ID=?";
 private static String SQL_INSERT = "INSERT INTO USER_EXAMS VALUES(?, ?, ?, ?, ?, ?, ?)";
 private static String SQL_UPDATE = "UPDATE USER_EXAMS SET UE_STS=?, UE_COR=?, UE_FLT=?, UE_EMP=?, UE_RES=? "
   + " WHERE USER_ID=? AND EXAM_ID=?";

 private List&amp;lt;UserExam&amp;gt; getTable(String query, Object... values) {
  List&amp;lt;UserExam&amp;gt; table = new ArrayList&amp;lt;UserExam&amp;gt;();
  List&amp;lt;Map&amp;lt;String, Object&amp;gt;&amp;gt; data = DataAdapter.getData(query, values);
  for (int i = 0; i &amp;lt; data.size(); i++) {
   Map&amp;lt;String, Object&amp;gt; row = new HashMap&amp;lt;String, Object&amp;gt;();
   Exam exam = new Exam();
   UserExam userExam = new UserExam();
   row = data.get(i);
   exam.setId((Integer) row.get("EXAM_ID"));
   exam.setNo((String) row.get("EXAM_NO"));
   exam.setDesc((String) row.get("EXAM_DESC"));
   exam.setStatus((String) row.get("EXAM_STS"));
   userExam.setUserId(((Long) row.get("USER_ID")).intValue());
   userExam.setExam(exam);
   userExam.setCorrects(((Long) row.get("UE_COR")).intValue());
   userExam.setFaults(((Long) row.get("UE_FLT")).intValue());
   userExam.setEmpties(((Long) row.get("UE_EMP")).intValue());
   userExam.setScore(((Long) row.get("UE_RES")).intValue());
   userExam.setStatus((String) row.get("UE_STS"));
   table.add(userExam);
  }

  return table;
 }

 public List&amp;lt;UserExam&amp;gt; getExamsByUserId(Integer userId) {
  return this.getTable(SQL_SELECT_OPENS_BY_USER, userId);
 }

 public boolean exists(UserExam userExam) {
  List&amp;lt;Map&amp;lt;String, Object&amp;gt;&amp;gt; data = DataAdapter.getData(SQL_EXISTS,
    userExam.getUserId(), userExam.getExam().getId());
  return data.size() &amp;gt; 0 ? true : false;

 }

 public void insert(UserExam userExam) {
  Object values[] = { userExam.getUserId(), userExam.getExam().getId(),
    userExam.getStatus(), userExam.getCorrects(),
    userExam.getFaults(), userExam.getEmpties(),
    userExam.getScore() };
  long newId = DataAdapter.persist(SQL_INSERT, values);
  System.out.println("new Id:" + newId);
 }

 public void update(UserExam userExam) {
  Object values[] = { userExam.getStatus(), userExam.getCorrects(),
    userExam.getFaults(), userExam.getEmpties(),
    userExam.getScore(), userExam.getUserId(),
    userExam.getExam().getId() };
  DataAdapter.persist(SQL_UPDATE, values);
 }
}
&lt;/pre&gt;&lt;br /&gt;
&lt;pre class="brush: java;"&gt;package controller;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

import data.UserExamDAO;
import entity.UserExam;

@ManagedBean(name = "oExamList")
@ViewScoped
public class OpenExamList implements Serializable {

 private static final long serialVersionUID = 1L;
 private List&amp;lt;UserExam&amp;gt; userExams = new ArrayList&amp;lt;UserExam&amp;gt;();
 public UserExamDAO ueDAO = new UserExamDAO();

 public OpenExamList() {
  userExams = ueDAO.getExamsByUserId(1);
 }

 public List&amp;lt;UserExam&amp;gt; getUserExams() {
  return userExams;
 }

 public void setUserExams(List&amp;lt;UserExam&amp;gt; userExams) {
  this.userExams = userExams;
 }

}
&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;openExams.xhtml&lt;/b&gt;&lt;br /&gt;
&lt;pre class="brush: xml;"&gt;&amp;lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&amp;gt;
&amp;lt;ui:composition xmlns="http://www.w3.org/1999/xhtml"
 xmlns:h="http://java.sun.com/jsf/html"
 xmlns:f="http://java.sun.com/jsf/core"
 xmlns:ui="http://java.sun.com/jsf/facelets"
 xmlns:fn="http://java.sun.com/jsp/jstl/functions"
 template="/resources/template.xhtml"&amp;gt;

 &amp;lt;ui:param name="title" value="Açık Sınav Listesi" /&amp;gt;
 &amp;lt;ui:define name="content"&amp;gt;
  &amp;lt;h:form prependId="false"&amp;gt;
   &amp;lt;h:dataTable value="#{oExamList.userExams}" var="userExam"
    rendered="#{fn:length(oExamList.userExams)&amp;gt;0}"&amp;gt;
    &amp;lt;h:column&amp;gt;
     &amp;lt;f:facet name="header"&amp;gt;Id&amp;lt;/f:facet&amp;gt;
        #{userExam.exam.id}
      &amp;lt;/h:column&amp;gt;
    &amp;lt;h:column&amp;gt;
     &amp;lt;f:facet name="header"&amp;gt;Sınav No&amp;lt;/f:facet&amp;gt;
        #{userExam.exam.no}
      &amp;lt;/h:column&amp;gt;
    &amp;lt;h:column&amp;gt;
     &amp;lt;f:facet name="header"&amp;gt;Tanım&amp;lt;/f:facet&amp;gt;
        #{userExam.exam.desc}
      &amp;lt;/h:column&amp;gt;
    &amp;lt;h:column&amp;gt;
     &amp;lt;f:facet name="header"&amp;gt;Durum&amp;lt;/f:facet&amp;gt;
        #{userExam.status}
      &amp;lt;/h:column&amp;gt;

    &amp;lt;h:column&amp;gt;
     &amp;lt;f:facet name="header"&amp;gt;İşlem&amp;lt;/f:facet&amp;gt;
     &amp;lt;h:link outcome="applyExam.xhtml?faces-redirect=true"
      value="Cevapla"&amp;gt;
      &amp;lt;f:param name="id" value="#{userExam.exam.id}" /&amp;gt;
     &amp;lt;/h:link&amp;gt;
    &amp;lt;/h:column&amp;gt;

   &amp;lt;/h:dataTable&amp;gt;
  &amp;lt;/h:form&amp;gt;

 &amp;lt;/ui:define&amp;gt;
&amp;lt;/ui:composition&amp;gt;
&lt;/pre&gt;&lt;br /&gt;
Sınavı cevaplayabilmek içinde gerekli entity , DAO, bean ve sayfamızı yapalım&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: java;"&gt;package entity;

import java.io.Serializable;

public class UserAnswer implements Serializable {

 private static final long serialVersionUID = 1L;
 private int userId;
 private int examId;
 private int questionId;
 private String answer;

 public int getUserId() {
  return userId;
 }

 public void setUserId(int userId) {
  this.userId = userId;
 }

 public int getExamId() {
  return examId;
 }

 public void setExamId(int examId) {
  this.examId = examId;
 }

 public int getQuestionId() {
  return questionId;
 }

 public void setQuestionId(int questionId) {
  this.questionId = questionId;
 }

 public String getAnswer() {
  return answer;
 }

 public void setAnswer(String answer) {
  this.answer = answer;
 }

}
&lt;/pre&gt;&lt;br /&gt;
&lt;pre class="brush: java;"&gt;package data;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import entity.UserAnswer;

public class UserAnswerDAO implements Serializable {

 private static final long serialVersionUID = 1L;
 private static String SQL_SELECT_BY_USER_AND_EXAM = "SELECT * FROM USER_ANSWERS "
   + " WHERE USER_ID=? AND EXAM_ID=?";
 private static String SQL_SELECT_BY_USER_AND_EXAM_AND_QUESTION = "SELECT * FROM USER_ANSWERS "
   + " WHERE USER_ID=? AND EXAM_ID=? AND QUEST_ID=?";

 private static String SQL_SELECT_EXIST = "SELECT * FROM USER_ANSWERS "
   + " WHERE USER_ID=? AND EXAM_ID=? AND QUEST_ID=?";
 private static String SQL_INSERT = "INSERT INTO USER_ANSWERS VALUES(?, ?, ?, ?)";
 private static String SQL_UPDATE = "UPDATE USER_ANSWERS SET ANSWER=?"
   + " WHERE  USER_ID=? AND EXAM_ID=? AND QUEST_ID=?";

 private List&amp;lt;UserAnswer&amp;gt; getTable(String query, Object... values) {
  List&amp;lt;UserAnswer&amp;gt; table = new ArrayList&amp;lt;UserAnswer&amp;gt;();
  List&amp;lt;Map&amp;lt;String, Object&amp;gt;&amp;gt; data = DataAdapter.getData(query, values);
  for (int i = 0; i &amp;lt; data.size(); i++) {
   Map&amp;lt;String, Object&amp;gt; row = new HashMap&amp;lt;String, Object&amp;gt;();
   row= data.get(i);
   UserAnswer answer = new UserAnswer();
   answer.setUserId((Integer) row.get("USER_ID"));
   answer.setExamId((Integer) row.get("EXAM_ID"));
   answer.setQuestionId((Integer) row.get("QUEST_ID"));
   answer.setAnswer((String) row.get("ANSWER"));
   table.add(answer);
  }
  return table;
 }

 public List&amp;lt;UserAnswer&amp;gt; getAnswersByUserAndExam(Integer userId,
   Integer examId) {
  return this.getTable(SQL_SELECT_BY_USER_AND_EXAM, userId, examId);
 }

 public UserAnswer getUserAnswerByUserAndExamAndQuestion(int userId,
   int examId, int questionId) {
  List&amp;lt;UserAnswer&amp;gt; answers = this.getTable(
    SQL_SELECT_BY_USER_AND_EXAM_AND_QUESTION, userId, examId,
    questionId);
  if (answers.size() &amp;gt; 0)
   return answers.get(0);
  else
   return null;
 }

 public boolean exist(UserAnswer answer) {
  List&amp;lt;Map&amp;lt;String, Object&amp;gt;&amp;gt; data = DataAdapter.getData(SQL_SELECT_EXIST,
    answer.getUserId(), answer.getExamId(), answer.getQuestionId());
  return !(data == null || data.size() == 0);
 }

 public int insert(UserAnswer answer) {
  Object values[] = { answer.getUserId(), answer.getExamId(),
    answer.getQuestionId(), answer.getAnswer() };
  return DataAdapter.persist(SQL_INSERT, values);

 }

 public void update(UserAnswer answer) {
  Object values[] = { answer.getAnswer(), answer.getUserId(),
    answer.getExamId(), answer.getQuestionId() };
  DataAdapter.persist(SQL_UPDATE, values);
 }

}
&lt;/pre&gt;&lt;br /&gt;
&lt;pre class="brush: java;"&gt;package controller;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.event.ActionEvent;
import javax.faces.model.SelectItem;

import util.FacesUtil;
import data.ChoiceDAO;
import data.ExamDAO;
import data.QuestionDAO;
import data.UserAnswerDAO;
import data.UserExamDAO;
import entity.Choice;
import entity.Exam;
import entity.Question;
import entity.UserAnswer;
import entity.UserExam;

@ManagedBean(name = "applyExam")
@ViewScoped
public class ApplyExam implements Serializable {

 private static final long serialVersionUID = 1L;
 private Exam exam;
 private Question question;
 private List&amp;lt;Question&amp;gt; questions;
 private List&amp;lt;SelectItem&amp;gt; choices;
 private String selectedChoice;
 private int questionSeq = -1;
 private boolean showQuestion = true;
 private QuestionDAO questionDAO = new QuestionDAO();
 private ChoiceDAO choiceDAO = new ChoiceDAO();
 private UserAnswerDAO userAnswerDAO = new UserAnswerDAO();
 private int answered = 0;
 private int passed = 0;

 public ApplyExam() {
  int id = 0;
  if (FacesUtil.getRequestParameter("id") != null)
   id = Integer.parseInt(FacesUtil.getRequestParameter("id"));
  exam = new ExamDAO().getExamById(id);
  questions = questionDAO.getQuestionsByExamId(exam.getId());
  UserExam userExam = new UserExam();
  userExam.setExam(exam);
  userExam.setUserId(1);
  userExam.setStatus("STARTED");
  UserExamDAO userExamDAO = new UserExamDAO();
  if (userExamDAO.exists(userExam)) {
   userExamDAO.update(userExam);
  } else {
   userExamDAO.insert(userExam);
  }
  nextQuestion();
 }

 public void apply() {
  writeAnswer();
  if (isLastRecord()) {
   showQuestion = false;
  } else
   nextQuestion();
 }

 public void pass() {
  selectedChoice = "";
  apply();
 }

 public boolean isLastRecord() {
  return questionSeq == (questions.size() - 1);
 }

 private void writeAnswer() {
  if (selectedChoice == "")
   passed++;
  else
   answered++;
  UserAnswer userAnswer = new UserAnswer();
  userAnswer.setUserId(1);
  userAnswer.setExamId(exam.getId());
  userAnswer.setQuestionId(question.getId());
  userAnswer.setAnswer(selectedChoice);
  if (userAnswerDAO.exist(userAnswer))
   userAnswerDAO.update(userAnswer);
  else
   userAnswerDAO.insert(userAnswer);

 }

 public void closeExam(ActionEvent event) {
  UserExam userExam = new UserExam();
  userExam.setExam(exam);
  userExam.setUserId(1);
  userExam.setStatus("COMPLETE");
  userExam.setCorrects(0);
  userExam.setFaults(0);
  userExam.setEmpties(0);
  userExam.setScore(0);
  new UserExamDAO().update(userExam);
 }

 private void nextQuestion() {
  if (!isLastRecord()) {
   questionSeq++;
   question = questions.get(questionSeq);
   UserAnswer answer = userAnswerDAO
     .getUserAnswerByUserAndExamAndQuestion(1, exam.getId(),
       question.getId());
   if (answer != null)
    selectedChoice = answer.getAnswer();
   else
    selectedChoice = "";
   List&amp;lt;Choice&amp;gt; choiceList = choiceDAO.getChoicesByQuestionId(question
     .getId());
   choices = new ArrayList&amp;lt;SelectItem&amp;gt;();
   for (Choice choice : choiceList) {
    choices.add(new SelectItem(choice.getChoiceNo(), choice
      .getText()));
   }

  }
 }

 public Question getQuestion() {
  return question;
 }

 public void setQuestion(Question question) {
  this.question = question;
 }

 public List&amp;lt;SelectItem&amp;gt; getChoices() {
  return choices;
 }

 public void setChoices(List&amp;lt;SelectItem&amp;gt; choices) {
  this.choices = choices;
 }

 public String getSelectedChoice() {
  return selectedChoice;
 }

 public void setSelectedChoice(String selectedChoice) {
  this.selectedChoice = selectedChoice;
 }

 public boolean isShowQuestion() {
  return showQuestion;
 }

 public void setShowQuestion(boolean showQuestion) {
  this.showQuestion = showQuestion;
 }

 public int getAnswered() {
  return answered;
 }

 public void setAnswered(int answered) {
  this.answered = answered;
 }

 public int getPassed() {
  return passed;
 }

 public void setPassed(int passed) {
  this.passed = passed;
 }

}
&lt;/pre&gt;&lt;br /&gt;
&lt;b&gt;applyExam.xhtml&lt;/b&gt;&lt;br /&gt;
&lt;pre class="brush: xml;"&gt;&amp;lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&amp;gt;
&amp;lt;ui:composition xmlns="http://www.w3.org/1999/xhtml"
 xmlns:h="http://java.sun.com/jsf/html"
 xmlns:f="http://java.sun.com/jsf/core"
 xmlns:ui="http://java.sun.com/jsf/facelets"
 xmlns:fn="http://java.sun.com/jsp/jstl/functions"
 template="/resources/template.xhtml"&amp;gt;

 &amp;lt;ui:param name="title" value="Açık Sınav Listesi" /&amp;gt;
 &amp;lt;ui:define name="content"&amp;gt;
  &amp;lt;h:form prependId="false"&amp;gt;
   &amp;lt;h:panelGrid rendered="#{applyExam.showQuestion}"&amp;gt;
    &amp;lt;h:outputText value="#{applyExam.question.text}" /&amp;gt;
    &amp;lt;h:selectOneRadio value="#{applyExam.selectedChoice}"
     layout="pageDirection" required="true"
     requiredMessage="Lütfen seçeneklerden birini işaretleyin"&amp;gt;
     &amp;lt;f:selectItems value="#{applyExam.choices}" var="choice" /&amp;gt;
    &amp;lt;/h:selectOneRadio&amp;gt;
    &amp;lt;h:panelGroup&amp;gt;
     &amp;lt;h:commandButton value="Cevapla" action="#{applyExam.apply}" /&amp;gt;
     #{' '}
     &amp;lt;h:commandButton value="Soruyu geç" action="#{applyExam.pass}"
      immediate="true" /&amp;gt;
    &amp;lt;/h:panelGroup&amp;gt;
   &amp;lt;/h:panelGrid&amp;gt;
   &amp;lt;h:panelGrid rendered="#{!applyExam.showQuestion}" columns="1"
    style="border: 3px double olive; font-weight:bold"&amp;gt;
    &amp;lt;h:outputText value="Tebrikler sınavı bitirdiniz..." /&amp;gt;
    &amp;lt;h:outputText value="Cevap Sayısı : #{applyExam.answered}" /&amp;gt;
    &amp;lt;h:outputText value="Boş Sayısı : #{applyExam.passed}" /&amp;gt;
    &amp;nbsp;
    &amp;lt;h:outputText value="Sınavı bitti olarak işaretlemek ister misiniz?" /&amp;gt;
    &amp;lt;h:panelGroup&amp;gt;
     &amp;lt;h:commandButton value="Evet"
      action="openExams.xhtml?faces-redirect=true"
      actionListener="#{applyExam.closeExam}" /&amp;gt;
     #{' '} 
     &amp;lt;h:button value="Hayır"
      outcome="openExams.xhtml?faces-redirect=true" /&amp;gt;
    &amp;lt;/h:panelGroup&amp;gt;
   &amp;lt;/h:panelGrid&amp;gt;
  &amp;lt;/h:form&amp;gt;

 &amp;lt;/ui:define&amp;gt;
&amp;lt;/ui:composition&amp;gt;
&lt;/pre&gt;&lt;br /&gt;
Artık sınavlarımız cevaplayabiliyoruz.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2509844667593749835-738283415076043505?l=jsf-tr.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ZUL-i2HBOoQ6_24yW-gEfgzlKEg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ZUL-i2HBOoQ6_24yW-gEfgzlKEg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ZUL-i2HBOoQ6_24yW-gEfgzlKEg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ZUL-i2HBOoQ6_24yW-gEfgzlKEg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/JavaserverFaces/~4/57GIICdiKLs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jsf-tr.blogspot.com/feeds/738283415076043505/comments/default" title="Kayıt Yorumları" /><link rel="replies" type="text/html" href="http://jsf-tr.blogspot.com/2010/08/ornek-proje-online-snav-08-snav.html#comment-form" title="0 Yorum" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2509844667593749835/posts/default/738283415076043505?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2509844667593749835/posts/default/738283415076043505?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JavaserverFaces/~3/57GIICdiKLs/ornek-proje-online-snav-08-snav.html" title="örnek proje : online sınav - 08 - Sınav cevaplama" /><author><name>ibrahim demir</name><uri>http://www.blogger.com/profile/14063980678411736699</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="23" src="http://4.bp.blogspot.com/_ELhi79hYqkg/S1mqZHoY-NI/AAAAAAAAAFA/RV2hY7WhL7U/S220/id.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://jsf-tr.blogspot.com/2010/08/ornek-proje-online-snav-08-snav.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0UEQXs8cSp7ImA9Wx5TFE0.&quot;"><id>tag:blogger.com,1999:blog-2509844667593749835.post-6437063643104302691</id><published>2010-05-17T17:35:00.049+03:00</published><updated>2010-07-29T14:00:00.579+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-07-29T14:00:00.579+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Örnek Proje" /><title>örnek proje : online sınav - 07 - Soru ve Cevap Girişi</title><content type="html">Sınav ait soru ve cevapları saklamak için questions ve choices adlı iki tablo oluşturalım.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class = "brush: sql;"&gt;CREATE TABLE `oexam_db`.`questions` (
  `QUEST_ID` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
  `EXAM_ID` INT NOT NULL ,
  `QUEST_SEQ` INT NOT NULL ,
  `QUEST_TEXT` INT NOT NULL,
  `CORRECT_CHC` VARCHAR(1) NOT NULL,
) ENGINE = MYISAM ;
&lt;/pre&gt;&lt;br /&gt;
&lt;pre class = "brush: sql;"&gt;CREATE TABLE `oexam_db`.`choices` (
`QUEST_ID` INT NOT NULL ,
`CHC_NO` VARCHAR(1) NOT NULL,
`CHC_TEXT` TEXT NOT NULL
) ENGINE = MYISAM ;
&lt;/pre&gt;examList.xhtml sayfasındaki tablomuza sorulara erişebilmek için bağlantı ekleyelim&lt;br /&gt;
&lt;pre class="brush: xml;"&gt;&amp;lt;h:link outcome="questionList.xhtml?faces-redirect=true"
      value="Sorular"&amp;gt;
      &amp;lt;f:param name="id" value="#{exam.id}" /&amp;gt;
     &amp;lt;/h:link&amp;gt;

&lt;/pre&gt;&lt;br /&gt;
Bu dosyaların web sayfalarımızda kullancağımız entity karşılıklarını oluşturalım&lt;br /&gt;
Question.java&lt;br /&gt;
&lt;pre class="brush: java;"&gt;package entity;

import java.io.Serializable;

public class Question implements Serializable {

 private static final long serialVersionUID = 1L;
 private int id;
 private int examId;
 private int seq;
 private String text;
 private String correctChoice;

 public int getId() {
  return id;
 }

 public void setId(int id) {
  this.id = id;
 }

 public int getExamId() {
  return examId;
 }

 public void setExamId(int examId) {
  this.examId = examId;
 }

 public int getSeq() {
  return seq;
 }

 public void setSeq(int seq) {
  this.seq = seq;
 }

 public String getText() {
  return text;
 }

 public void setText(String text) {
  this.text = text;
 }

 public String getCorrectChoice() {
  return correctChoice;
 }

 public void setCorrectChoice(String correctChoice) {
  this.correctChoice = correctChoice;
 }

}
&lt;/pre&gt;&lt;br /&gt;
Choice.java&lt;br /&gt;
&lt;pre class="brush: java;"&gt;package entity;

import java.io.Serializable;

public class Choice implements Serializable {

 private static final long serialVersionUID = 1L;
 private int questionId;
 private String choiceNo;
 private String text;

 public int getQuestionId() {
  return questionId;
 }

 public void setQuestionId(int questionId) {
  this.questionId = questionId;

 }

 public String getChoiceNo() {
  return choiceNo;
 }

 public void setChoiceNo(String choiceNo) {
  this.choiceNo = choiceNo;
 }

 public String getText() {
  return text;
 }

 public void setText(String text) {
  this.text = text;
 }

}
&lt;/pre&gt;&lt;br /&gt;
Question ve Choice işin DataAdapter oluştruralım&lt;br /&gt;
&lt;br /&gt;
QuestionDAO.java&lt;br /&gt;
&lt;pre class="brush: java;"&gt;package data;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import entity.Question;

public class QuestionDAO implements Serializable {

 private static final long serialVersionUID = 1L;
 private static String SQL_SELECT = "SELECT * FROM QUESTIONS";
 private static String SQL_SELECT_BY_ID = "SELECT * FROM QUESTIONS WHERE QUEST_ID=?";
 private static String SQL_SELECT_BY_EXAM_ID = "SELECT * FROM QUESTIONS WHERE EXAM_ID=?";
 private static String SQL_SELECT_BY_EXAM_AND_SEQ = "SELECT * FROM QUESTIONS WHERE EXAM_ID=? AND QUEST_SEQ=?";
 private static String SQL_INSERT = "INSERT INTO QUESTIONS VALUES(null, ?, ?, ?, ?)";
 private static String SQL_UPDATE = "UPDATE QUESTIONS SET EXAM_ID=?, QUEST_SEQ=?,QUEST_TEXT=?,CORRECT_CHC=?"
   + " WHERE QUEST_ID=?";
 private static String SQL_DELETE = "DELETE FROM QUESTIONS WHERE QUEST_ID=?";

 private List&amp;lt;Question&amp;gt; getTable(String query, Object... values) {
  List&amp;lt;Question&amp;gt; table = new ArrayList&amp;lt;Question&amp;gt;();
  List&amp;lt;Map&amp;lt;String, Object&amp;gt;&amp;gt; data = DataAdapter.getData(query, values);
  for (int i = 0; i &amp;lt; data.size(); i++) {
   Map&amp;lt;String, Object&amp;gt; row = new HashMap&amp;lt;String, Object&amp;gt;();
   Question question = new Question();
   row = data.get(i);
   question.setId((Integer) row.get("QUEST_ID"));
   question.setExamId((Integer) row.get("EXAM_ID"));
   question.setSeq((Integer) row.get("QUEST_SEQ"));
   question.setText((String) row.get("QUEST_TEXT"));
question.setCorrectChoice((String) row.get("CORRECT_CHC"));
   table.add(question);
  }
  return table;
 }

 public List&amp;lt;Question&amp;gt; getQuestions() {
  return this.getTable(SQL_SELECT);
 }

 public List&amp;lt;Question&amp;gt; getQuestionsByExamId(Integer examId) {
  return this.getTable(SQL_SELECT_BY_EXAM_ID, examId);
 }

 public Question getQuestionById(Integer id) {
  List&amp;lt;Question&amp;gt; questions = this.getTable(SQL_SELECT_BY_ID, id);
  if (questions != null &amp;&amp; questions.size() &amp;gt; 0)
   return questions.get(0);
  else
   return null;
 }

 public Question getQuestionByExamIdAndSeq(Integer examId, Integer seq) {
  List&amp;lt;Question&amp;gt; questions = this.getTable(SQL_SELECT_BY_EXAM_AND_SEQ,
    examId, seq);
  if (questions != null &amp;&amp; questions.size() &amp;gt; 0)
   return questions.get(0);
  else
   return null;
 }

 public int insert(Question question) {
  Object values[] = { question.getExamId(), question.getSeq(),
    question.getText(), question.getCorrectChoice() };
  return DataAdapter.persist(SQL_INSERT, values);
 }

 public void update(Question question) {
  Object values[] = { question.getExamId(), question.getSeq(),
    question.getText(), question.getCorrectChoice(),
    question.getId() };
  DataAdapter.persist(SQL_UPDATE, values);
 }

 public void delete(Long id) {
  DataAdapter.persist(SQL_DELETE, id);
 }
}
&lt;/pre&gt;&lt;br /&gt;
ChoiceDAO.java&lt;br /&gt;
&lt;pre class="brush: java;"&gt;package data;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import entity.Choice;

public class ChoiceDAO implements Serializable {

 private static final long serialVersionUID = 1L;
 private static String SQL_SELECT = "SELECT * FROM CHOICES";
 private static String SQL_SELECT_BY_QUEST_ID = "SELECT * FROM CHOICES WHERE QUEST_ID=? ORDER BY CHC_NO";
 private static String SQL_SELECT_BY_QUEST_ID_AND_NO = "SELECT * FROM CHOICES WHERE QUEST_ID=? AND CHC_NO=?";
 private static String SQL_INSERT = "INSERT INTO CHOICES VALUES(?, ?, ?)";
 private static String SQL_UPDATE = "UPDATE CHOICES SET CHC_TEXT=?"
   + " WHERE QUEST_ID=? AND CHC_NO=?";

 private List&amp;lt;Choice&amp;gt; getTable(String query, Object... values) {
  List&amp;lt;Choice&amp;gt; table = new ArrayList&amp;lt;Choice&amp;gt;();
  List&amp;lt;Map&amp;lt;String, Object&amp;gt;&amp;gt; data = DataAdapter.getData(query, values);
  for (int i = 0; i &amp;lt; data.size(); i++) {
   Map&amp;lt;String, Object&amp;gt; row = new HashMap&amp;lt;String, Object&amp;gt;();
   Choice choice = new Choice();
   row = data.get(i);
   choice.setQuestionId((Integer) row.get("QUEST_ID"));
   choice.setChoiceNo((String) row.get("CHC_NO"));
   choice.setText((String) row.get("CHC_TEXT"));
   table.add(choice);
  }
  return table;
 }

 public List&amp;lt;Choice&amp;gt; getChoices() {
  return this.getTable(SQL_SELECT);
 }

 public List&amp;lt;Choice&amp;gt; getChoicesByQuestionId(Integer questionId) {
  return this.getTable(SQL_SELECT_BY_QUEST_ID, questionId);
 }

 public Choice getChoiceByQuestionIdAndNo(Integer questionId, String choiceNo) {
  List&amp;lt;Choice&amp;gt; choices = this.getTable(SQL_SELECT_BY_QUEST_ID_AND_NO,
    questionId, choiceNo);
  if (choices != null &amp;&amp; choices.size() &gt; 0)
   return choices.get(0);
  else
   return null;
 }

 public int insert(Choice choice) {
  Object values[] = { choice.getQuestionId(), choice.getText() };
  return DataAdapter.persist(SQL_INSERT, values);

 }

 public void update(Choice choice) {
  Object values[] = { choice.getText(), choice.getQuestionId(),
    choice.getChoiceNo() };
  DataAdapter.persist(SQL_UPDATE, values);
 }

}
&lt;/pre&gt;&lt;br /&gt;
Sayfalarımız&lt;br /&gt;
&lt;br /&gt;
questionList.xhtml&lt;br /&gt;
&lt;pre class="brush: xml;"&gt;&amp;lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&amp;gt;
&amp;lt;ui:composition xmlns="http://www.w3.org/1999/xhtml"
 xmlns:h="http://java.sun.com/jsf/html"
 xmlns:f="http://java.sun.com/jsf/core"
 xmlns:ui="http://java.sun.com/jsf/facelets"
 xmlns:fn="http://java.sun.com/jsp/jstl/functions"
 template="/resources/template.xhtml"&amp;gt;

 &amp;lt;ui:param name="title" value="#{questList.exam.no} nolu sınav soruları" /&amp;gt;
 &amp;lt;ui:define name="content"&amp;gt;
  &amp;lt;h:form prependId="false"&amp;gt;
   &amp;lt;h:button outcome="questionAdd.xhtml" value="Yeni Kayıt"&amp;gt;
    &amp;lt;f:param name="id" value="#{questList.exam.id}" /&amp;gt;
   &amp;lt;/h:button&amp;gt;

   &amp;lt;h:dataTable value="#{questList.questions}" var="question"
    rendered="#{fn:length(questList.questions)&amp;gt;0}"&amp;gt;
    &amp;lt;h:column&amp;gt;
     &amp;lt;f:facet name="header"&amp;gt;Id&amp;lt;/f:facet&amp;gt;
        #{question.id}
      &amp;lt;/h:column&amp;gt;
    &amp;lt;h:column&amp;gt;
     &amp;lt;f:facet name="header"&amp;gt;Soru No&amp;lt;/f:facet&amp;gt;
        #{question.seq}
      &amp;lt;/h:column&amp;gt;
    &amp;lt;h:column&amp;gt;
     &amp;lt;f:facet name="header"&amp;gt;Soru&amp;lt;/f:facet&amp;gt;
     &amp;lt;h:outputText
      value="#{fn:substring(question.text,0,100)} #{fn:length(question.text)&amp;gt;100?'...':''} " /&amp;gt;
    &amp;lt;/h:column&amp;gt;
    &amp;lt;h:column&amp;gt;
     &amp;lt;f:facet name="header"&amp;gt;İşlem&amp;lt;/f:facet&amp;gt;
     &amp;lt;h:link outcome="questionEdit.xhtml?faces-redirect=true"
      value="Düzenle"&amp;gt;
      &amp;lt;f:param name="id" value="#{question.id}" /&amp;gt;
     &amp;lt;/h:link&amp;gt;
    &amp;lt;/h:column&amp;gt;

   &amp;lt;/h:dataTable&amp;gt;
  &amp;lt;/h:form&amp;gt;

 &amp;lt;/ui:define&amp;gt;
&amp;lt;/ui:composition&amp;gt;
&lt;/pre&gt;&lt;br /&gt;
questionAdd.xhtml&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: xml;"&gt;&amp;lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&amp;gt;
&amp;lt;ui:composition xmlns="http://www.w3.org/1999/xhtml"
 xmlns:h="http://java.sun.com/jsf/html"
 xmlns:f="http://java.sun.com/jsf/core"
 xmlns:ui="http://java.sun.com/jsf/facelets"
 xmlns:fn="http://java.sun.com/jsp/jstl/functions"
 template="/resources/template.xhtml"&amp;gt;

 &amp;lt;ui:param name="title" value="Soru Ekle" /&amp;gt;
 &amp;lt;ui:define name="content"&amp;gt;
  &amp;lt;h:form prependId="false"&amp;gt;
   &amp;lt;h:panelGrid columns="2" styleClass="dataform"&amp;gt;
    &amp;lt;h:outputText value="Soru No" /&amp;gt;
    &amp;lt;h:inputText value="#{questionAdd.question.seq}" style="width:20px"
     required="true" requiredMessage="Soru No alanı boş geçilemez"&amp;gt;
    &amp;lt;/h:inputText&amp;gt;
    &amp;lt;h:outputText value="Doğru Şık" /&amp;gt;
    &amp;lt;h:inputText value="#{questionAdd.question.correctChoice}"
     style="width:20px" required="true"
     requiredMessage="Doğru şık alanı boş geçeilmez"/&amp;gt;
    
    &amp;lt;h:outputText value="Soru" /&amp;gt;
    &amp;lt;h:inputText value="#{questionAdd.question.text}" required="true"
     requiredMessage="Soru metni boş geçilemez" style="width:300px" /&amp;gt;
    &amp;lt;h:outputText value="A)" /&amp;gt;
    &amp;lt;h:inputText value="#{questionAdd.choiceA.text}" required="true"
     requiredMessage="A seçeneği boş geçilemez" style="width:300px" /&amp;gt;
    &amp;lt;h:outputText value="B)" /&amp;gt;
    &amp;lt;h:inputText value="#{questionAdd.choiceB.text}" required="true"
     requiredMessage="B seçeneği boş geçilemez" style="width:300px" /&amp;gt;
    &amp;lt;h:outputText value="C)" /&amp;gt;
    &amp;lt;h:inputText value="#{questionAdd.choiceC.text}" required="true"
     requiredMessage="C seçeneği boş geçilemez" style="width:300px" /&amp;gt;
    &amp;lt;h:outputText value="D)" /&amp;gt;
    &amp;lt;h:inputText value="#{questionAdd.choiceD.text}" required="true"
     requiredMessage="D seçeneği boş geçilemez" style="width:300px" /&amp;gt;
    &amp;lt;h:outputText value="E)" /&amp;gt;
    &amp;lt;h:inputText value="#{questionAdd.choiceE.text}" required="true"
     requiredMessage="E seçeneği boş geçilemez" style="width:300px" /&amp;gt;
    &amp;lt;h:panelGroup /&amp;gt;
    &amp;lt;h:commandButton value="Kaydet" action="#{questionAdd.save}" /&amp;gt;
   &amp;lt;/h:panelGrid&amp;gt;
  &amp;lt;/h:form&amp;gt;
 &amp;lt;/ui:define&amp;gt;
&amp;lt;/ui:composition&amp;gt;
&lt;/pre&gt;&lt;br /&gt;
questionEdit.xhtml&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: xml;"&gt;&amp;lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&amp;gt;
&amp;lt;ui:composition xmlns="http://www.w3.org/1999/xhtml"
 xmlns:h="http://java.sun.com/jsf/html"
 xmlns:f="http://java.sun.com/jsf/core"
 xmlns:ui="http://java.sun.com/jsf/facelets"
 xmlns:fn="http://java.sun.com/jsp/jstl/functions"
 template="/resources/template.xhtml"&amp;gt;

 &amp;lt;ui:param name="title" value="Soru Düzenle" /&amp;gt;
 &amp;lt;ui:define name="content"&amp;gt;
  &amp;lt;h:form prependId="false"&amp;gt;
   &amp;lt;h:panelGrid columns="2" styleClass="dataform"&amp;gt;
    &amp;lt;h:outputText value="Soru No" /&amp;gt;
    &amp;lt;h:inputText value="#{questionEdit.question.seq}" style="width:30px;text-align:right"
     required="true" requiredMessage="Soru No alanı boş geçilemez" &amp;gt;
    &amp;lt;/h:inputText&amp;gt;
    &amp;lt;h:outputText value="Doğru Şık" /&amp;gt;
    &amp;lt;h:inputText value="#{questionAdd.question.correctChoice}"
     style="width:20px" required="true"
     requiredMessage="Doğru şık alanı boş geçeilmez"/&amp;gt;

    &amp;lt;h:outputText value="Soru" /&amp;gt;
    &amp;lt;h:inputTextarea  value="#{questionEdit.question.text}" required="true"
     requiredMessage="Soru metni boş geçilemez" cols="35" rows="5" /&amp;gt;
    &amp;lt;h:outputText value="A)" /&amp;gt;
    &amp;lt;h:inputText value="#{questionEdit.choiceA.text}" required="true"
     requiredMessage="A seçeneği boş geçilemez" style="width:300px" /&amp;gt;
    &amp;lt;h:outputText value="B)" /&amp;gt;
    &amp;lt;h:inputText value="#{questionEdit.choiceB.text}" required="true"
     requiredMessage="B seçeneği boş geçilemez" style="width:300px" /&amp;gt;
    &amp;lt;h:outputText value="C)" /&amp;gt;
    &amp;lt;h:inputText value="#{questionEdit.choiceC.text}" required="true"
     requiredMessage="C seçeneği boş geçilemez" style="width:300px" /&amp;gt;
    &amp;lt;h:outputText value="D)" /&amp;gt;
    &amp;lt;h:inputText value="#{questionEdit.choiceD.text}" required="true"
     requiredMessage="D seçeneği boş geçilemez" style="width:300px" /&amp;gt;
    &amp;lt;h:outputText value="E)" /&amp;gt;
    &amp;lt;h:inputText value="#{questionEdit.choiceE.text}" required="true"
     requiredMessage="E seçeneği boş geçilemez" style="width:300px" /&amp;gt;
    &amp;lt;h:panelGroup /&amp;gt;
    &amp;lt;h:commandButton value="Kaydet" action="#{questionEdit.save}" /&amp;gt;
   &amp;lt;/h:panelGrid&amp;gt;
  &amp;lt;/h:form&amp;gt;
 &amp;lt;/ui:define&amp;gt;
&amp;lt;/ui:composition&amp;gt;
&lt;/pre&gt;&lt;br /&gt;
Sayfalarımız için ManagedBeanler&lt;br /&gt;
&lt;br /&gt;
QuestionList.java&lt;br /&gt;
&lt;pre class="brush: java;"&gt;package controller;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

import util.FacesUtil;

import data.ExamDAO;
import data.QuestionDAO;

import entity.Exam;
import entity.Question;

@ManagedBean(name = "questList")
@ViewScoped
public class QuestionList implements Serializable {

 private static final long serialVersionUID = 1L;

 private List&amp;lt;Question&amp;gt; questions = new ArrayList&amp;lt;Question&amp;gt;();
 private QuestionDAO questionDAO = new QuestionDAO();
 private Exam exam = new Exam();

 public QuestionList() {
  Integer id = 0;
  if (FacesUtil.getRequestParameter("id") != null)
   id = Integer.parseInt(FacesUtil.getRequestParameter("id"));
  if (id &amp;gt; 0) {
   exam = new ExamDAO().getExamById(id);
   questions = questionDAO.getQuestionsByExamId(exam.getId());
  }
 }

 public List&amp;lt;Question&amp;gt; getQuestions() {
  return questions;
 }

 public void setQuestions(List&amp;lt;Question&amp;gt; questions) {
  this.questions = questions;
 }

 public Exam getExam() {
  return exam;
 }

 public void setExam(Exam exam) {
  this.exam = exam;
 }

}
&lt;/pre&gt;&lt;br /&gt;
QuestionAdd.java&lt;br /&gt;
&lt;pre class="brush: java;"&gt;package controller;

import java.io.Serializable;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

import util.FacesUtil;
import data.ChoiceDAO;
import data.ExamDAO;
import data.QuestionDAO;
import entity.Choice;
import entity.Exam;
import entity.Question;

@ManagedBean(name = "questionAdd")
@ViewScoped
public class QuestionAdd implements Serializable {

 private static final long serialVersionUID = 1L;

 private QuestionDAO questionDAO = new QuestionDAO();
 private ChoiceDAO choiceDAO = new ChoiceDAO();
 private Exam exam = new Exam();
 private Question question = new Question();
 private Choice choiceA = new Choice();
 private Choice choiceB = new Choice();
 private Choice choiceC = new Choice();
 private Choice choiceD = new Choice();
 private Choice choiceE = new Choice();

 public QuestionAdd() {
  Integer id = 0;
  if (FacesUtil.getRequestParameter("id") != null)
   id = Integer.parseInt(FacesUtil.getRequestParameter("id"));
  if (id &amp;gt; 0) {
   exam = new ExamDAO().getExamById(id);
  }
 }

 public Exam getExam() {
  return exam;
 }

 public void setExam(Exam exam) {
  this.exam = exam;
 }

 public Question getQuestion() {
  return question;
 }

 public void setQuestion(Question question) {
  this.question = question;
 }

 public Choice getChoiceA() {
  return choiceA;
 }

 public void setChoiceA(Choice choiceA) {
  this.choiceA = choiceA;
 }

 public Choice getChoiceB() {
  return choiceB;
 }

 public void setChoiceB(Choice choiceB) {
  this.choiceB = choiceB;
 }

 public Choice getChoiceC() {
  return choiceC;
 }

 public void setChoiceC(Choice choiceC) {
  this.choiceC = choiceC;
 }

 public Choice getChoiceD() {
  return choiceD;
 }

 public void setChoiceD(Choice choiceD) {
  this.choiceD = choiceD;
 }

 public Choice getChoiceE() {
  return choiceE;
 }

 public void setChoiceE(Choice choiceE) {
  this.choiceE = choiceE;
 }

 public String save() {
  if (checkData()) {
   question.setExamId(exam.getId());
   int questionId = questionDAO.insert(question);
   choiceA.setQuestionId(questionId);
   choiceA.setChoiceNo("A");
   choiceDAO.insert(choiceA);
   choiceB.setQuestionId(questionId);
   choiceB.setChoiceNo("B");
   choiceDAO.insert(choiceB);
   choiceC.setQuestionId(questionId);
   choiceC.setChoiceNo("C");
   choiceDAO.insert(choiceC);
   choiceD.setQuestionId(questionId);
   choiceD.setChoiceNo("D");
   choiceDAO.insert(choiceD);
   choiceE.setQuestionId(questionId);
   choiceE.setChoiceNo("E");
   choiceDAO.insert(choiceE);
   return "questionList.xhtml?faces-redirect=true&amp;id=" + exam.getId();
  } else
   return null;
 }

 public boolean checkData() {
  Question dbQuestion = questionDAO.getQuestionByExamIdAndSeq(exam
    .getId(), question.getSeq());
  if (dbQuestion != null) {
   FacesUtil.addMessage("Bu soru numarası daha önce kullanımış",
     FacesMessage.SEVERITY_ERROR);
   return false;
  }
  if (!question.getCorrectChoice().equalsIgnoreCase("A")
    &amp;&amp; !question.getCorrectChoice().equalsIgnoreCase("B")
    &amp;&amp; !question.getCorrectChoice().equalsIgnoreCase("C")
    &amp;&amp; !question.getCorrectChoice().equalsIgnoreCase("D")
    &amp;&amp; !question.getCorrectChoice().equalsIgnoreCase("E")) {
   FacesUtil.addMessage(
     "Doğru şık yanlızca A,B,C,D,E değerleri alabilir...",
     FacesMessage.SEVERITY_ERROR);
   return false;
  }

  return true;
 }
}
&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
QuestionEdit.java&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: java;"&gt;package controller;

import java.io.Serializable;
import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

import util.FacesUtil;
import data.ChoiceDAO;
import data.ExamDAO;
import data.QuestionDAO;
import entity.Choice;
import entity.Exam;
import entity.Question;

@ManagedBean(name = "questionEdit")
@ViewScoped
public class QuestionEdit implements Serializable {

 private static final long serialVersionUID = 1L;

 private QuestionDAO questionDAO = new QuestionDAO();
 private ChoiceDAO choiceDAO = new ChoiceDAO();
 private Exam exam = new Exam();
 private Question question = new Question();
 private Choice choiceA = new Choice();
 private Choice choiceB = new Choice();
 private Choice choiceC = new Choice();
 private Choice choiceD = new Choice();
 private Choice choiceE = new Choice();

 public QuestionEdit() {
  Integer id = 0;
  if (FacesUtil.getRequestParameter("id") != null)
   id = Integer.parseInt(FacesUtil.getRequestParameter("id"));
  if (id &amp;gt; 0) {
   question = questionDAO.getQuestionById(id);
   exam = new ExamDAO().getExamById(question.getExamId());
   choiceA = choiceDAO.getChoiceByQuestionIdAndNo(question.getId(),
     "A");
   choiceB = choiceDAO.getChoiceByQuestionIdAndNo(question.getId(),
     "B");
   choiceC = choiceDAO.getChoiceByQuestionIdAndNo(question.getId(),
     "C");
   choiceD = choiceDAO.getChoiceByQuestionIdAndNo(question.getId(),
     "D");
   choiceE = choiceDAO.getChoiceByQuestionIdAndNo(question.getId(),
     "E");
  }
 }

 public Exam getExam() {
  return exam;
 }

 public void setExam(Exam exam) {
  this.exam = exam;
 }

 public Question getQuestion() {
  return question;
 }

 public void setQuestion(Question question) {
  this.question = question;
 }

 public Choice getChoiceA() {
  return choiceA;
 }

 public void setChoiceA(Choice choiceA) {
  this.choiceA = choiceA;
 }

 public Choice getChoiceB() {
  return choiceB;
 }

 public void setChoiceB(Choice choiceB) {
  this.choiceB = choiceB;
 }

 public Choice getChoiceC() {
  return choiceC;
 }

 public void setChoiceC(Choice choiceC) {
  this.choiceC = choiceC;
 }

 public Choice getChoiceD() {
  return choiceD;
 }

 public void setChoiceD(Choice choiceD) {
  this.choiceD = choiceD;
 }

 public Choice getChoiceE() {
  return choiceE;
 }

 public void setChoiceE(Choice choiceE) {
  this.choiceE = choiceE;
 }

 public String save() {
  if (checkData()) {
   questionDAO.update(question);
   choiceDAO.update(choiceA);
   choiceDAO.update(choiceB);
   choiceDAO.update(choiceC);
   choiceDAO.update(choiceD);
   choiceDAO.update(choiceE);
   return "questionList.xhtml?faces-redirect=true&amp;id=" + exam.getId();
  } else
   return null;
 }

 public boolean checkData() {
  Question dbQuestion = questionDAO.getQuestionByExamIdAndSeq(exam
    .getId(), question.getSeq());
  if (dbQuestion != null &amp;&amp; dbQuestion.getId() != question.getId()) {
   FacesUtil.addMessage("Bu soru numarası daha önce kullanımış",
     FacesMessage.SEVERITY_ERROR);
   return false;
  }
  if (!question.getCorrectChoice().equalsIgnoreCase("A")
    &amp;&amp; !question.getCorrectChoice().equalsIgnoreCase("B")
    &amp;&amp; !question.getCorrectChoice().equalsIgnoreCase("C")
    &amp;&amp; !question.getCorrectChoice().equalsIgnoreCase("D")
    &amp;&amp; !question.getCorrectChoice().equalsIgnoreCase("E")) {
   FacesUtil.addMessage(
     "Doğru şık yanlızca A,B,C,D,E değerleri alabilir...",
     FacesMessage.SEVERITY_ERROR);
   return false;
  }

  return true;
 }
}

&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2509844667593749835-6437063643104302691?l=jsf-tr.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/dqv6wTp0ZqFETSt5zNuNcADMMpY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/dqv6wTp0ZqFETSt5zNuNcADMMpY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/dqv6wTp0ZqFETSt5zNuNcADMMpY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/dqv6wTp0ZqFETSt5zNuNcADMMpY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/JavaserverFaces/~4/ZG_ixawMiJA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jsf-tr.blogspot.com/feeds/6437063643104302691/comments/default" title="Kayıt Yorumları" /><link rel="replies" type="text/html" href="http://jsf-tr.blogspot.com/2010/05/ornek-proje-online-snav-07-soru-ve.html#comment-form" title="2 Yorum" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2509844667593749835/posts/default/6437063643104302691?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2509844667593749835/posts/default/6437063643104302691?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JavaserverFaces/~3/ZG_ixawMiJA/ornek-proje-online-snav-07-soru-ve.html" title="örnek proje : online sınav - 07 - Soru ve Cevap Girişi" /><author><name>ibrahim demir</name><uri>http://www.blogger.com/profile/14063980678411736699</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="23" src="http://4.bp.blogspot.com/_ELhi79hYqkg/S1mqZHoY-NI/AAAAAAAAAFA/RV2hY7WhL7U/S220/id.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://jsf-tr.blogspot.com/2010/05/ornek-proje-online-snav-07-soru-ve.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkEMRnY8eyp7ImA9Wx5TE08.&quot;"><id>tag:blogger.com,1999:blog-2509844667593749835.post-8106852854641177012</id><published>2010-05-15T21:43:00.000+03:00</published><updated>2010-07-28T15:38:07.873+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-07-28T15:38:07.873+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Örnek Proje" /><title>örnek proje : online sınav - 06 - ekran kontrolleri</title><content type="html">Sınav giriş ve değişiklik işlemlerinde , &lt;br /&gt;
- Sınav kodu alanı zorunlu ve unique &lt;br /&gt;
- Sınav tanımı alanı boş geçilemez&lt;br /&gt;
Sınav listesi ekranında&lt;br /&gt;
- Sınav durumu NEW'ten farklı ise silinemesin&lt;br /&gt;
&lt;br /&gt;
Şimdi bu kontrolleri examAdd.xhtml, examEdit.xhtml, examList.xhtml sayfalarına ve Bean'lerine ekleyelim. Sınav kodu ile veri tabanından kontrol yapabilmek için ExamDAO'ya getExamByExamNo isimli bir method ekleyelim. SQL cümlesinide bean'in başına koyalım.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: java;"&gt;private static String SQL_SELECT_BY_EXAM_NO = "SELECT * FROM EXAMS WHERE EXAM_NO=?";

 public Exam getExamByExamNo(String examNo) {
  List&amp;lt;Exam&amp;gt; exams = this.getTable(SQL_SELECT_BY_EXAM_NO,examNo.toUpperCase());
  if (exams != null &amp;&amp; exams.size() &gt; 0)
   return exams.get(0);  
  else
   return null;
 }
&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
examAdd.xhtml ilgili alanlara required ekleyelim&lt;br /&gt;
&lt;pre class="brush: xml;"&gt;&amp;lt;h:panelGrid styleClass="dataform" columns="2"&amp;gt;
    &amp;lt;h:outputText value="Sınav No" /&amp;gt;
    &amp;lt;h:inputText value="#{examAdd.exam.no}" required="true"
     requiredMessage="Sınav No boş geçilemez..." /&amp;gt;
     &amp;lt;h:outputText value="Açıklama" /&amp;gt;
     &amp;lt;h:inputText value="#{examAdd.exam.desc}" required="true"
      requiredMessage="Açıklama alanı boş geçilemez..." /&amp;gt;
     &amp;lt;h:panelGroup /&amp;gt;
     &amp;lt;h:panelGroup&amp;gt;
      &amp;lt;h:commandButton value="Kaydet" action="#{examAdd.save}" /&amp;gt;
      &amp;lt;h:button value="Vazgeç"
       outcome="examList.xhtml?faces-redirect=true" /&amp;gt;
     &amp;lt;/h:panelGroup&amp;gt;
   &amp;lt;/h:panelGrid&amp;gt;

&lt;/pre&gt;&lt;br /&gt;
ExamAdd.java dosyasında kayıt yaparken veri kontrolünü ekleyelim.&lt;br /&gt;
&lt;pre class="brush: java;"&gt;public String save() {
  if (checkData()) {
   exam.setStatus("NEW");
   examDAO.insert(exam);
   return "examList.xhtml?faces-redirect=true";
  } else
   return null;
 }

 private boolean checkData() {
  Exam dbExam = examDAO.getExamByExamNo(exam.getNo());
  if (dbExam != null) {
   FacesUtil.addMessage("Bu sınav numarası daha önce kullanışmış",
     FacesMessage.SEVERITY_ERROR);
   return false;
  } else
   return true;
 }

&lt;/pre&gt;&lt;br /&gt;
Ekleme işlemine benzer şekilde edit işleminide değiştirelim.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: xml;"&gt;&amp;lt;h:panelGrid styleClass="dataform" columns="2"&amp;gt;
    &amp;lt;h:outputText value="Id" /&amp;gt;
    &amp;lt;h:inputText value="#{examEdit.exam.id}" readonly="true" /&amp;gt;
    &amp;lt;h:outputText value="Sınav No" /&amp;gt;
    &amp;lt;h:inputText value="#{examEdit.exam.no}" required="true"
     requiredMessage="Sınav No boş geçilemez..." /&amp;gt;
    &amp;lt;h:outputText value="Açıklama" /&amp;gt;
    &amp;lt;h:inputText value="#{examEdit.exam.desc}" required="true"
     requiredMessage="Açıklama alanı boş geçilemez..." /&amp;gt;
    &amp;lt;h:outputText value="Durum" /&amp;gt;
    &amp;lt;h:selectOneMenu value="#{examEdit.exam.status}"&amp;gt;
     &amp;lt;f:selectItem itemLabel="NEW" itemValue="NEW" /&amp;gt;
     &amp;lt;f:selectItem itemLabel="STARTED" itemValue="STARTED" /&amp;gt;
     &amp;lt;f:selectItem itemLabel="EVAL" itemValue="EVAL" /&amp;gt;
     &amp;lt;f:selectItem itemLabel="COMPLETE" itemValue="COMPLETE" /&amp;gt;
    &amp;lt;/h:selectOneMenu&amp;gt;
    &amp;lt;h:panelGroup /&amp;gt;
    &amp;lt;h:panelGroup&amp;gt;
     &amp;lt;h:commandButton value="Kaydet" action="#{examEdit.save}" /&amp;gt;
     &amp;lt;h:button value="Vazgeç"
      outcome="examList.xhtml?faces-redirect=true" /&amp;gt;
    &amp;lt;/h:panelGroup&amp;gt;
   &amp;lt;/h:panelGrid&amp;gt;

&lt;/pre&gt;&lt;br /&gt;
ExamEdit.java&lt;br /&gt;
&lt;pre class="brush: java;"&gt;public String save() {
  if (checkData()) {
   examDAO.update(exam);
   return "examList.xhtml?faces-redirect=true";
  } else
   return null;
 }

 private boolean checkData() {
  Exam dbExam = examDAO.getExamByExamNo(exam.getNo());
  if (dbExam != null &amp;&amp; exam.getId() != dbExam.getId()) {
   FacesUtil.addMessage("Bu sınav numarası daha önce kullanışmış",
     FacesMessage.SEVERITY_ERROR);
   return false;
  } else
   return true;

 }

&lt;/pre&gt;&lt;br /&gt;
Sınav listesi dosyasında ise eğer status NEW değilse sil bağlantısını hiç göstermeyerek kontrolü yapabiliriz&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: xml;"&gt;&amp;lt;h:commandLink value="Sil" actionListener="#{examList.delete}"
      rendered="#{exam.status=='NEW'}"&amp;gt;
      &amp;lt;f:attribute name="exam" value="#{exam}" /&amp;gt;
     &amp;lt;/h:commandLink&amp;gt;

&lt;/pre&gt;&lt;br /&gt;
Son olarak examList.xhtml dosyasında liste boş ise tablomuzun yazdırılmaması için kod ekleyelim. taglib olarak aşağıdaki taglibi ui:composition'a ekleyelim&lt;br /&gt;
&lt;pre class="brush :xml;"&gt;xmlns:fn="http://java.sun.com/jsp/jstl/functions"
&lt;/pre&gt;datatable'in rendered özelliğini aşağıdaki gibi değiştirelim. fn:length komutu listenin boyutunu geri döner.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush :xml;"&gt;&amp;lt;h:dataTable value="#{examList.exams}" var="exam"
    rendered="#{fn:length(examList.exams)&gt;0}"lt;
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2509844667593749835-8106852854641177012?l=jsf-tr.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/6pGmzqQJiHkIKskyDlIbhaBAJnE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/6pGmzqQJiHkIKskyDlIbhaBAJnE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/6pGmzqQJiHkIKskyDlIbhaBAJnE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/6pGmzqQJiHkIKskyDlIbhaBAJnE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/JavaserverFaces/~4/2MTcAlNyPPI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jsf-tr.blogspot.com/feeds/8106852854641177012/comments/default" title="Kayıt Yorumları" /><link rel="replies" type="text/html" href="http://jsf-tr.blogspot.com/2010/07/ornek-proje-online-snav-06-ekran.html#comment-form" title="6 Yorum" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2509844667593749835/posts/default/8106852854641177012?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2509844667593749835/posts/default/8106852854641177012?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JavaserverFaces/~3/2MTcAlNyPPI/ornek-proje-online-snav-06-ekran.html" title="örnek proje : online sınav - 06 - ekran kontrolleri" /><author><name>ibrahim demir</name><uri>http://www.blogger.com/profile/14063980678411736699</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="23" src="http://4.bp.blogspot.com/_ELhi79hYqkg/S1mqZHoY-NI/AAAAAAAAAFA/RV2hY7WhL7U/S220/id.jpg" /></author><thr:total>6</thr:total><feedburner:origLink>http://jsf-tr.blogspot.com/2010/07/ornek-proje-online-snav-06-ekran.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkMNRn08eSp7ImA9Wx5TE0Q.&quot;"><id>tag:blogger.com,1999:blog-2509844667593749835.post-3370615262868732548</id><published>2010-05-13T21:36:00.003+03:00</published><updated>2010-07-29T11:01:37.371+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-07-29T11:01:37.371+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Örnek Proje" /><title>örnek proje : online sınav - 05 - veri katmanı</title><content type="html">Bu sayfa ile ilgili kaynak kodlarının son halini &lt;a href="http://www.ibrahimdemir.name.tr/sources/sinav.zip"&gt;buradan&lt;/a&gt; indirebilirsiniz&lt;br /&gt;
&lt;br /&gt;
Önceki konuda veri tabanınında gelecek verileri listeleyen ve değiştiren bir yapı kurduk. Şimdi bu yapıyı veri tabanı ile bağlayalım. Benim daha önceden kullandığım ve Veritabanından her türlü sorguyu map'ler ile geri dönen bir DataAdapter sınıfın var. Tüm veri iletişimini bu class sağlayacak. Ama öncelikle veritabanını yaratalım. Daha önceki örneklerde olduğu gibi veritabanı olarak mysql'i kullanacağız. Lütfen oexam_db adında bir veri tabanı oluşturalım ve karakter seti utf-8 olsun. aşağıdaki kodu çalıştırarak bir exams tablosu oluşturalım&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: sql;"&gt;CREATE TABLE `oexam_db`.`exams` (
  `EXAM_ID` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
  `EXAM_NO` VARCHAR( 10 ) NOT NULL ,
  `EXAM_DESC` VARCHAR( 100 ) NOT NULL ,
  `EXAM_STS` VARCHAR( 10 ) NOT NULL
) ENGINE = MYISAM ;
&lt;/pre&gt;&lt;br /&gt;
Şimdi sıra, veri tabanı hazır olduğuna göre iletişimi sağlayacak sınıfta.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
package : data;&lt;br /&gt;
class   : DataAdaptar.java&lt;br /&gt;
&lt;pre class="brush: java;"&gt;package data;

import java.io.Serializable;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class DataAdapter implements Serializable {

 private static final long serialVersionUID = 3781773121819034538L;
 private static Connection connection;
 private final static String URL = "jdbc:mysql://localhost/oexam_db?characterEncoding=UTF-8";
 private final static String USERNAME = "root";
 private final static String PASSWORD = "";
 private final static String DRIVER = "com.mysql.jdbc.Driver";

 private static Connection getConnection() {

  try {
   if (connection == null || connection.isClosed()) {
    Class.forName(DRIVER);
    connection = DriverManager.getConnection(URL, USERNAME,
      PASSWORD);
   }
  } catch (SQLException e) {
   e.printStackTrace();
  } catch (ClassNotFoundException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }

  return connection;

 }

 public static List&amp;lt;Map&amp;lt;String, Object&amp;gt;&amp;gt; getData(String query,
   Object... values) {
  PreparedStatement pstmt = null;
  ResultSetMetaData rsmd = null;
  List&amp;lt;Map&amp;lt;String, Object&amp;gt;&amp;gt; table = new ArrayList&amp;lt;Map&amp;lt;String, Object&amp;gt;&amp;gt;();
  try {
   pstmt = getConnection().prepareStatement(query);
   setStatementParameters(pstmt, values);
   ResultSet rs = pstmt.executeQuery();
   rsmd = rs.getMetaData();
   while (rs.next()) {
    Map&amp;lt;String, Object&amp;gt; row = new HashMap&amp;lt;String, Object&amp;gt;();
    for (int i = 1; i &amp;lt;= rsmd.getColumnCount(); i++) {
     row.put(rsmd.getColumnName(i), rs.getObject(i));
    }
    table.add(row);
   }
   rs.close();
   pstmt.close();
  } catch (SQLException e) {
   e.printStackTrace();
  }
  return table;
 }

 public static long persist(String query, Object... values) {
  PreparedStatement pstmt = null;
  int generatedKey = -1;
  try {
   pstmt = getConnection().prepareStatement(query,
     PreparedStatement.RETURN_GENERATED_KEYS);
   setStatementParameters(pstmt, values);
   pstmt.executeUpdate();
   if (query.toUpperCase().startsWith("INSERT")) {
    ResultSet gkrs = pstmt.getGeneratedKeys();
    if(gkrs.next()) {
     generatedKey= gkrs.getInt(1);
    }
   }
    pstmt.close();
  } catch (SQLException e) {
   e.printStackTrace();
  }
  return generatedKey;
 }

 private static void setStatementParameters(PreparedStatement pstmt,
   Object... values) {
  if (values != null) {
   try {
    for (int i = 0; i &amp;lt; values.length; i++) {
     pstmt.setObject(i + 1, values[i]);
    }
   } catch (SQLException e) {
    e.printStackTrace();
   }
  }
 }

}
&lt;/pre&gt;&lt;br /&gt;
Exam tablomuz ile iletimim kuracak DAO'muzu yazalım. Bu örnek ilk olduğu için adım adım ilerleyeceğim ancak sonraki örneklerde tüm DAO'yu birden yazacağım. Önceden örnek olarak oluşturduğumuz ExamDAO'nun constructer'ını silin. Öncekikler ExamDAO'ya her tür listeyi entity'ye dönüştürebimesi için getData şeklinde bir fonksiyon ekleyelim&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: java;"&gt;private List&amp;lt;Exam&amp;gt; getTable(String query, Object... values) {
  List&amp;lt;Exam&amp;gt; table = new ArrayList&amp;lt;Exam&amp;gt;();
  List&amp;lt;Map&amp;lt;String, Object&amp;gt;&amp;gt; data = DataAdapter.getData(query, values);
  for (int i = 0; i &amp;lt; data.size(); i++) {
   Map&amp;lt;String, Object&amp;gt; row = new HashMap&amp;lt;String, Object&amp;gt;();
   Exam exam = new Exam();
   row = data.get(i);
   exam.setId((Integer) row.get("EXAM_ID"));
   exam.setNo((String) row.get("EXAM_NO"));
   exam.setDesc((String) row.get("EXAM_DESC"));
   exam.setStatus((String) row.get("EXAM_STS"));
   table.add(exam);
  }
  return table;
 }
&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
Bu fonksiyon DataAdapter'dan gelen listeyi exam'lardan oluşan bir listeye çevirir. Bu fonksiyonu kullanarak tüm exam'ları getiren bir getExams fonksiyonu oluşturalım&lt;br /&gt;
&lt;b&gt;private static String SQL_SELECT = "SELECT * FROM EXAMS";&lt;/b&gt; bunu class'ın üst kısmına ekleyelim.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: java;"&gt;private static String SQL_SELECT = "SELECT * FROM EXAMS";


 public List&amp;lt;Exam&amp;gt; getExams() {
  return this.getTable(SQL_SELECT);
 }

&lt;/pre&gt;&lt;br /&gt;
Yukarıdakine benzer şekilde sınıfımızın üst bölgesine aşağıdaki static değilkenleri ekleyin&lt;br /&gt;
&lt;br /&gt;
&lt;pre class ="brush: java;"&gt;private static String SQL_SELECT = "SELECT * FROM EXAMS";
 private static String SQL_SELECT_BY_ID = "SELECT * FROM EXAMS WHERE EXAM_ID=?";
 private static String SQL_INSERT = "INSERT INTO EXAMS VALUES(null, ?, ?, ?)";
 private static String SQL_UPDATE = "UPDATE EXAMS SET EXAM_NO=?, EXAM_DESC=?,EXAM_STS=?"
   + " WHERE EXAM_ID=?";
 private static String SQL_DELETE = "DELETE FROM EXAMS WHERE EXAM_ID=?";
&lt;/pre&gt;&lt;br /&gt;
şimdi sırayla bunlara bağlı fonksiyonları oluşturalım.&lt;br /&gt;
getExamById()&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: java;"&gt;public Exam getExamById(Integer id) {
  List&amp;lt;Exam&amp;gt; exams = this.getTable(SQL_SELECT_BY_ID, id);
  if (exams != null &amp;&amp; exams.size() &amp;gt; 0)
   return exams.get(0);
  else
   return null;
 }
&lt;/pre&gt;&lt;br /&gt;
insert işlemi sonucunda yeni oluşan id geri dönülür&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: java;"&gt;public void insert(Exam exam) {
  Object values[] = { exam.getNo(), exam.getDesc(), exam.getStatus() };
  long newId = DataAdapter.persist(SQL_INSERT, values);
  System.out.println("new Id:" + newId);
 }
&lt;/pre&gt;&lt;br /&gt;
update &lt;br /&gt;
&lt;pre class="brush: java;"&gt;public void update(Exam exam) {
  Object values[] = { exam.getNo(), exam.getDesc(), exam.getStatus(),
    exam.getId() };
  DataAdapter.persist(SQL_UPDATE, values);
 }
&lt;/pre&gt;&lt;br /&gt;
delete işlemini normalde flag ile takip edip silmemem gerekir ama buradaki örneklerde sileceğiz.&lt;br /&gt;
&lt;pre class="brush: java;"&gt;public void delete(Long id) {
  DataAdapter.persist(SQL_DELETE, id);
 }
&lt;/pre&gt;&lt;br /&gt;
Böylece tüm fonkisyonlarımız yeniden yazdık ve sınıfımızın son hali aşağıdaki gibidir&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: java;"&gt;package data;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import entity.Exam;

public class ExamDAO implements Serializable {

 private static final long serialVersionUID = 1L;
 // private List&amp;lt;Exam&amp;gt; exams = new ArrayList&amp;lt;Exam&amp;gt;();

 private static String SQL_SELECT = "SELECT * FROM EXAMS";
 private static String SQL_SELECT_BY_ID = "SELECT * FROM EXAMS WHERE EXAM_ID=?";
 private static String SQL_INSERT = "INSERT INTO EXAMS VALUES(null, ?, ?, ?)";
 private static String SQL_UPDATE = "UPDATE EXAMS SET EXAM_NO=?, EXAM_DESC=?,EXAM_STS=?"
   + " WHERE EXAM_ID=?";
 private static String SQL_DELETE = "DELETE FROM EXAMS WHERE EXAM_ID=?";

 private List&amp;lt;Exam&amp;gt; getTable(String query, Object... values) {
  List&amp;lt;Exam&amp;gt; table = new ArrayList&amp;lt;Exam&amp;gt;();
  List&amp;lt;Map&amp;lt;String, Object&amp;gt;&amp;gt; data = DataAdapter.getData(query, values);
  for (int i = 0; i &amp;lt; data.size(); i++) {
   Map&amp;lt;String, Object&amp;gt; row = new HashMap&amp;lt;String, Object&amp;gt;();
   Exam exam = new Exam();
   row = data.get(i);
   exam.setId((Integer) row.get("EXAM_ID"));
   exam.setNo((String) row.get("EXAM_NO"));
   exam.setDesc((String) row.get("EXAM_DESC"));
   exam.setStatus((String) row.get("EXAM_STS"));
   table.add(exam);
  }
  return table;
 }

 public List&amp;lt;Exam&amp;gt; getExams() {
  return this.getTable(SQL_SELECT);
 }

 public Exam getExamById(Integer id) {
  List&amp;lt;Exam&amp;gt; exams = this.getTable(SQL_SELECT_BY_ID, id);
  if (exams != null &amp;&amp; exams.size() &amp;gt; 0)
   return exams.get(0);
  else
   return null;
 }

 public int insert(Exam exam) {
  Object values[] = { exam.getNo(), exam.getDesc(), exam.getStatus() };
  return DataAdapter.persist(SQL_INSERT, values);
 }

 public void update(Exam exam) {
  Object values[] = { exam.getNo(), exam.getDesc(), exam.getStatus(),
    exam.getId() };
  DataAdapter.persist(SQL_UPDATE, values);
 }

 public void delete(Long id) {
  DataAdapter.persist(SQL_DELETE, id);
 }

}
&lt;/pre&gt;&lt;br /&gt;
Veri katamanı görüntüleme katmanı ve controllerdan ayrı olduğu için biz sadece veri katmanın değiştirdiğimize göre projenin çalışıyor olması gerekiyor. Lütfen deneyin&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2509844667593749835-3370615262868732548?l=jsf-tr.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/NY-ezwk0nQZMtH3me6Ni-77-4vk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/NY-ezwk0nQZMtH3me6Ni-77-4vk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/NY-ezwk0nQZMtH3me6Ni-77-4vk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/NY-ezwk0nQZMtH3me6Ni-77-4vk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/JavaserverFaces/~4/Qh_GgBQeZP4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jsf-tr.blogspot.com/feeds/3370615262868732548/comments/default" title="Kayıt Yorumları" /><link rel="replies" type="text/html" href="http://jsf-tr.blogspot.com/2010/06/ornek-proje-online-snav-05-veri-katman.html#comment-form" title="9 Yorum" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2509844667593749835/posts/default/3370615262868732548?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2509844667593749835/posts/default/3370615262868732548?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JavaserverFaces/~3/Qh_GgBQeZP4/ornek-proje-online-snav-05-veri-katman.html" title="örnek proje : online sınav - 05 - veri katmanı" /><author><name>ibrahim demir</name><uri>http://www.blogger.com/profile/14063980678411736699</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="23" src="http://4.bp.blogspot.com/_ELhi79hYqkg/S1mqZHoY-NI/AAAAAAAAAFA/RV2hY7WhL7U/S220/id.jpg" /></author><thr:total>9</thr:total><feedburner:origLink>http://jsf-tr.blogspot.com/2010/06/ornek-proje-online-snav-05-veri-katman.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A04GQ3wzfCp7ImA9Wx5TEkk.&quot;"><id>tag:blogger.com,1999:blog-2509844667593749835.post-4076789311587028726</id><published>2010-05-09T19:52:00.011+03:00</published><updated>2010-07-27T19:58:42.284+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-07-27T19:58:42.284+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Örnek Proje" /><title>örnek proje : online sınav - 04 :: Sınav Yönetici - view katmanı - 1</title><content type="html">Şablonumuzu oluşturduğumuza göre artık sınav yöneticisine ait ekranları tasarlayabiliriz. Proje şu sıra ile ilerleyecek&lt;br /&gt;
1. Sınav yöneticisi ekran tasarımları&lt;br /&gt;
2. Öğrenci ekran tasarımları&lt;br /&gt;
3. veri katmanın projeye eklenmesi&lt;br /&gt;
4. Güvenlik ve yetkilendirme katmanın eklenmesi&lt;br /&gt;
&lt;br /&gt;
İlk olarak sınav listesinin girildiği bir sayfa yapacağız ve bu ekranda veri gösterebilmek için entity,controller ve veri katmanlarını sanal olarak yaratacağız.&lt;br /&gt;
Şimdi 3 adet package yaratalım, package ismleri sırayla data,controller ve entity olsun.&lt;br /&gt;
&lt;br /&gt;
package : entity&lt;br /&gt;
file    : Exam.java &lt;br /&gt;
&lt;pre class="brush : java;"&gt;package entity;

import java.io.Serializable;

public class Exam implements Serializable {
 private static final long serialVersionUID = 1L;
 private Integer id;
 private String no;
 private String desc;
 private String status;

 public Exam() {
 };

 public Exam(Integer id, String no, String desc, String status) {
  this.id = id;
  this.no = no;
  this.desc = desc;
  this.status = status;
 }

 public Integer getId() {
  return id;
 }

 public void setId(Integer id) {
  this.id = id;
 }

 public String getNo() {
  return no;
 }

 public void setNo(String no) {
  this.no = no;
 }

 public String getDesc() {
  return desc;
 }

 public void setDesc(String desc) {
  this.desc = desc;
 }

 public String getStatus() {
  return status;
 }

 public void setStatus(String status) {
  this.status = status;
 }

}
&lt;/pre&gt;&lt;br /&gt;
Bu entity veri katmanından controller'a aktarılır ve bunun için biz sanal bir veri katmanı yaratmalıyız.&lt;br /&gt;
&lt;br /&gt;
package : data&lt;br /&gt;
filename: ExamDAO.java&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush : java;"&gt;package data;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import entity.Exam;

public class ExamDAO implements Serializable {

 private static final long serialVersionUID = 1L;
 private List&amp;lt;Exam&amp;gt; exams = new ArrayList&amp;lt;Exam&amp;gt;();

 public ExamDAO() {
  exams.clear();
  exams.add(new Exam(1, "2010/0001", "2010 1. Sınav", "NEW"));
  exams.add(new Exam(2, "2010/0002", "2010 2. Sınav", "STARTED"));
  exams.add(new Exam(3, "2010/0003", "2010 3. Sınav", "EVAL."));
  exams.add(new Exam(4, "2010/0004", "2010 4. Sınav", "COMPLTE."));

 }

 public List&amp;lt;Exam&amp;gt; getExams() {
  return exams;
 }

}
&lt;/pre&gt;&lt;br /&gt;
ve nihayet bu verileri sayfada gösterebilmek için &lt;br /&gt;
&lt;br /&gt;
filename : examList.xhtml&lt;br /&gt;
&lt;pre class="brush: xml"&gt;&amp;lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&amp;gt;
&amp;lt;ui:composition xmlns="http://www.w3.org/1999/xhtml"
 xmlns:h="http://java.sun.com/jsf/html"
 xmlns:f="http://java.sun.com/jsf/core"
 xmlns:ui="http://java.sun.com/jsf/facelets"
 template="/resources/template.xhtml"&amp;gt;

 &amp;lt;ui:param name="title" value="Sınav Listesi" /&amp;gt;
 &amp;lt;ui:define name="content"&amp;gt;
  &amp;lt;h:dataTable value="#{examList.exams}" var="exam"&amp;gt;
   &amp;lt;h:column&amp;gt;
    &amp;lt;f:facet name="header"&amp;gt;Id&amp;lt;/f:facet&amp;gt;
    #{exam.id}
   &amp;lt;/h:column&amp;gt;
   &amp;lt;h:column&amp;gt;
    &amp;lt;f:facet name="header"&amp;gt;Sınav No&amp;lt;/f:facet&amp;gt;
    #{exam.no}
   &amp;lt;/h:column&amp;gt;
   &amp;lt;h:column&amp;gt;
    &amp;lt;f:facet name="header"&amp;gt;Tanım&amp;lt;/f:facet&amp;gt;
    #{exam.desc}
   &amp;lt;/h:column&amp;gt;
   &amp;lt;h:column&amp;gt;
    &amp;lt;f:facet name="header"&amp;gt;Durum&amp;lt;/f:facet&amp;gt;
    #{exam.status}
   &amp;lt;/h:column&amp;gt;

  &amp;lt;/h:dataTable&amp;gt;

 &amp;lt;/ui:define&amp;gt;
&amp;lt;/ui:composition&amp;gt;
&lt;/pre&gt;&lt;br /&gt;
&lt;b&gt;ExamList.java&lt;/b&gt;&lt;br /&gt;
&lt;pre class="brush: java;"&gt;package controller;

import java.util.ArrayList;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

import data.ExamDAO;

import entity.Exam;

@ManagedBean(name = "examList")
@ViewScoped
public class ExamList {

 private List&amp;lt;Exam&amp;gt; exams = new ArrayList&amp;lt;Exam&amp;gt;();
 public ExamDAO examDAO = new ExamDAO();

 public ExamList() {
  exams = examDAO.getExams();
 }

 public List&amp;lt;Exam&amp;gt; getExams() {
  return exams;
 }

 public void setExams(List&amp;lt;Exam&amp;gt; exams) {
  this.exams = exams;
 }

}
&lt;/pre&gt;&lt;br /&gt;
Şu anda sınav için ana ekranımızı yaptık. Bu sayfaya bağlantılar ekleyerek, Yeni sınav oluşturma, sınav düzenleme , değerlendirme gibi işlemleri yapacağız.&lt;br /&gt;
&lt;br /&gt;
Bu işlem için aşağıdaki değişikleri yapacağız&lt;br /&gt;
ExamDAO.java&lt;br /&gt;
- getExamById&lt;br /&gt;
- insert&lt;br /&gt;
- update&lt;br /&gt;
- delete&lt;br /&gt;
&lt;br /&gt;
examList.xhtml&lt;br /&gt;
düzenle bağlantısı&lt;br /&gt;
silme bağlantısı&lt;br /&gt;
&lt;br /&gt;
iki tane sayfa ekleyeceğiz ve bunlar için controller yazacağız&lt;br /&gt;
examAdd.xhtml ve examEdit.xhtml&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Önce değişiklikleri yapalım&lt;br /&gt;
&lt;br /&gt;
ExamDAO.java&lt;br /&gt;
&lt;pre class="brush: java;"&gt;package data;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import entity.Exam;

public class ExamDAO implements Serializable {

 private static final long serialVersionUID = 1L;
 private List&amp;lt;Exam&amp;gt; exams = new ArrayList&amp;lt;Exam&amp;gt;();

 public ExamDAO() {
  exams.clear();
  exams.add(new Exam(1, "2010/0001", "2010 1. Sınav", "NEW"));
  exams.add(new Exam(2, "2010/0002", "2010 2. Sınav", "STARTED"));
  exams.add(new Exam(3, "2010/0003", "2010 3. Sınav", "EVAL"));
  exams.add(new Exam(4, "2010/0004", "2010 4. Sınav", "COMPLETE"));

 }

 public List&amp;lt;Exam&amp;gt; getExams() {
  return exams;
 }

 public Exam getExamById(Integer id) {

  for (Exam exam : exams) {
   if (exam.getId().equals(id))
    return exam;
  }
  return null;
 }
 
 public void insert(Exam exam)  {
  System.out.println("exam inserted");
 }

 public void update(Exam exam)  {
  System.out.println("exam updated :" + exam.getId());
 }
 public void delete(Long id)  {
  System.out.println("exam deleted :" + id);
 }
}
&lt;/pre&gt;&lt;br /&gt;
examList.xhtml &lt;br /&gt;
&lt;pre class="brush: xml;"&gt;&amp;lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&amp;gt;
&amp;lt;ui:composition xmlns="http://www.w3.org/1999/xhtml"
 xmlns:h="http://java.sun.com/jsf/html"
 xmlns:f="http://java.sun.com/jsf/core"
 xmlns:ui="http://java.sun.com/jsf/facelets"
 template="/resources/template.xhtml"&amp;gt;

 &amp;lt;ui:param name="title" value="Sınav Listesi" /&amp;gt;
 &amp;lt;ui:define name="content"&amp;gt;
  &amp;lt;h:form prependId="false"&amp;gt;
   &amp;lt;h:button outcome="examAdd.xhtml" value="Yeni Kayıt" /&amp;gt;

   &amp;lt;h:dataTable value="#{examList.exams}" var="exam"&amp;gt;
    &amp;lt;h:column&amp;gt;
     &amp;lt;f:facet name="header"&amp;gt;Id&amp;lt;/f:facet&amp;gt;
    #{exam.id}
   &amp;lt;/h:column&amp;gt;
    &amp;lt;h:column&amp;gt;
     &amp;lt;f:facet name="header"&amp;gt;Sınav No&amp;lt;/f:facet&amp;gt;
    #{exam.no}
   &amp;lt;/h:column&amp;gt;
    &amp;lt;h:column&amp;gt;
     &amp;lt;f:facet name="header"&amp;gt;Tanım&amp;lt;/f:facet&amp;gt;
    #{exam.desc}
   &amp;lt;/h:column&amp;gt;
    &amp;lt;h:column&amp;gt;
     &amp;lt;f:facet name="header"&amp;gt;Durum&amp;lt;/f:facet&amp;gt;
    #{exam.status}
   &amp;lt;/h:column&amp;gt;
    &amp;lt;h:column&amp;gt;
     &amp;lt;f:facet name="header"&amp;gt;İşlem&amp;lt;/f:facet&amp;gt;
     &amp;lt;h:link outcome="examEdit.xhtml?faces-redirect=true"
      value="Düzenle"&amp;gt;
      &amp;lt;f:param name="id" value="#{exam.id}" /&amp;gt;
     &amp;lt;/h:link&amp;gt;
     #{' '}
     &amp;lt;h:commandLink value="Sil" actionListener="#{examList.delete}"&amp;gt;
      &amp;lt;f:attribute name="exam" value="#{exam}"/&amp;gt;
     &amp;lt;/h:commandLink&amp;gt;
    &amp;lt;/h:column&amp;gt;

   &amp;lt;/h:dataTable&amp;gt;
  &amp;lt;/h:form&amp;gt;

 &amp;lt;/ui:define&amp;gt;
&amp;lt;/ui:composition&amp;gt;
&lt;/pre&gt;&lt;br /&gt;
şimdi ise yeni dosyalarımı oluşturalım.&lt;br /&gt;
&lt;br /&gt;
examAdd.xhtml&lt;br /&gt;
&lt;pre class="brush: xml;"&gt;&amp;lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&amp;gt;
&amp;lt;ui:composition xmlns="http://www.w3.org/1999/xhtml"
 xmlns:h="http://java.sun.com/jsf/html"
 xmlns:f="http://java.sun.com/jsf/core"
 xmlns:ui="http://java.sun.com/jsf/facelets"
 template="/resources/template.xhtml"&amp;gt;

 &amp;lt;ui:param name="title" value="Sınav Ekle" /&amp;gt;
 &amp;lt;ui:define name="content"&amp;gt;
  &amp;lt;h:form prependId="false"&amp;gt;
   &amp;lt;h:panelGrid styleClass="dataform" columns="2"&amp;gt;
    &amp;lt;h:outputText value="Sınav No" /&amp;gt;
    &amp;lt;h:inputText value="#{examAdd.exam.no}" /&amp;gt;
    &amp;lt;h:outputText value="Açıklama" /&amp;gt;
    &amp;lt;h:inputText value="#{examAdd.exam.desc}" /&amp;gt;
    &amp;lt;h:panelGroup /&amp;gt;
    &amp;lt;h:panelGroup&amp;gt;
     &amp;lt;h:commandButton value="Kaydet" action="#{examAdd.save}" /&amp;gt;
     &amp;lt;h:button value="Vazgeç"
      outcome="examList.xhtml?faces-redirect=true" /&amp;gt;
    &amp;lt;/h:panelGroup&amp;gt;
   &amp;lt;/h:panelGrid&amp;gt;
  &amp;lt;/h:form&amp;gt;
 &amp;lt;/ui:define&amp;gt;
&amp;lt;/ui:composition&amp;gt;
&lt;/pre&gt;&lt;br /&gt;
examAdd.java&lt;br /&gt;
&lt;pre class="brush: java;"&gt;package controller;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;

import data.ExamDAO;

import entity.Exam;

@ManagedBean(name = "examAdd")
@RequestScoped
public class ExamAdd {

 private Exam exam = new Exam();
 private ExamDAO examDAO = new ExamDAO();

 public Exam getExam() {
  return exam;
 }

 public void setExam(Exam exam) {
  this.exam = exam;
 }

 public String save() {
  exam.setId(10);
  exam.setStatus("NEW");
  examDAO.insert(exam);
  return "examList.xhtml?faces-redirect=true";
 }
}
&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
examEdit.xhtml&lt;br /&gt;
&lt;pre class="brush: xml;"&gt;&amp;lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&amp;gt;
&amp;lt;ui:composition xmlns="http://www.w3.org/1999/xhtml"
 xmlns:h="http://java.sun.com/jsf/html"
 xmlns:f="http://java.sun.com/jsf/core"
 xmlns:ui="http://java.sun.com/jsf/facelets"
 template="/resources/template.xhtml"&amp;gt;

 &amp;lt;ui:param name="title" value="Sınav Düzenle" /&amp;gt;
 &amp;lt;ui:define name="content"&amp;gt;
  &amp;lt;h:form prependId="false"&amp;gt;
   &amp;lt;h:panelGrid styleClass="dataform" columns="2"&amp;gt;
    &amp;lt;h:outputText value="Id" /&amp;gt;
    &amp;lt;h:inputText value="#{examEdit.exam.id}" /&amp;gt;
    &amp;lt;h:outputText value="Sınav No" /&amp;gt;
    &amp;lt;h:inputText value="#{examEdit.exam.no}" /&amp;gt;
    &amp;lt;h:outputText value="Açıklama" /&amp;gt;
    &amp;lt;h:inputText value="#{examEdit.exam.desc}" /&amp;gt;
    &amp;lt;h:outputText value="Durum" /&amp;gt;
    &amp;lt;h:selectOneMenu value="#{examEdit.exam.status}"&amp;gt;
     &amp;lt;f:selectItem itemLabel="NEW" itemValue="NEW" /&amp;gt;
     &amp;lt;f:selectItem itemLabel="STARTED" itemValue="STARTED" /&amp;gt;
     &amp;lt;f:selectItem itemLabel="EVAL" itemValue="EVAL" /&amp;gt;
     &amp;lt;f:selectItem itemLabel="COMPLETE" itemValue="COMPLETE" /&amp;gt;
    &amp;lt;/h:selectOneMenu&amp;gt;
    &amp;lt;h:panelGroup /&amp;gt;
    &amp;lt;h:panelGroup&amp;gt;
     &amp;lt;h:commandButton value="Kaydet" action="#{examEdit.save}" /&amp;gt;
     &amp;lt;h:button value="Vazgeç"
      outcome="examList.xhtml?faces-redirect=true" /&amp;gt;
    &amp;lt;/h:panelGroup&amp;gt;
   &amp;lt;/h:panelGrid&amp;gt;
  &amp;lt;/h:form&amp;gt;
 &amp;lt;/ui:define&amp;gt;
&amp;lt;/ui:composition&amp;gt;
&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: java;"&gt;package controller;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

import util.FacesUtil;
import data.ExamDAO;
import entity.Exam;

@ManagedBean(name = "examEdit")
@ViewScoped
public class ExamEdit {

 private Exam exam = new Exam();
 private ExamDAO examDAO= new ExamDAO();

 public ExamEdit() {
  Integer id = 0;
  if (FacesUtil.getRequestParameter("id") != null)
   id = Integer.parseInt(FacesUtil.getRequestParameter("id"));
  exam = examDAO.getExamById(id);
 }

 public Exam getExam() {
  return exam;
 }

 public void setExam(Exam exam) {
  this.exam = exam;
 }

 public String save() {
  examDAO.update(exam);
  return "examList.xhtml?faces-redirect=true";
 }
}
&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
Arkadaşlar burada dikkat edilecek konu liste sayfasından edit sayfasına exam id'yi parameter olarak gönderiyoruz. examEdit.java'nın bu parameteryi aldıktan sonra veriyi veri tabanında getirip ekranda göstermelidir. Bu parametreyi almak ve FacesContext ile ilgili bir çok işlemi  yapmak için kendi projelerimde kendi yazdığım bir util. programı kullanıyorum. Sizde projelerinizde istediğiniz gibi kullanabilirsiniz. util adıyla bir package yaratın ve için aşağıdaki dosyayı ekleyin&lt;br /&gt;
&lt;br /&gt;
FacesUtil.java&lt;br /&gt;
&lt;pre class="brush: java;"&gt;package util;

import javax.faces.application.Application;
import javax.faces.application.FacesMessage;
import javax.faces.application.FacesMessage.Severity;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class FacesUtil {

 public static FacesContext getFacesContext() {
  return FacesContext.getCurrentInstance();
 }

 public static ExternalContext getExternalContext() {
  return getFacesContext().getExternalContext();
 }

 public static Application getApplication() {
  return getFacesContext().getApplication();
 }

 public static HttpSession getSession() {
  return (HttpSession) getExternalContext().getSession(true);
 }

 public static HttpServletRequest getRequest() {
  return (HttpServletRequest) getExternalContext().getRequest();
 }

 public static HttpServletResponse getResponse() {
  return (HttpServletResponse) getExternalContext().getResponse();
 }

 public static Object getSessionAttribute(String keyword) {
  return getSession().getAttribute(keyword);
 }

 public static void setSessionAttribute(String keyword, Object object) {
  getSession().setAttribute(keyword, object);
 }

 public static String getRequestParameter(String keyword) {
  return getRequest().getParameter(keyword);
 }

 public static ServletContext getServletContext() {
  return (ServletContext) getExternalContext().getContext();
 }

 public static void addMessage(String message, Severity severity) {
  getFacesContext().addMessage(null,
    new FacesMessage(severity, message, null));
 }
 
}
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2509844667593749835-4076789311587028726?l=jsf-tr.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/5OMN_uxBjK6rbRaKxIoADgvdfdg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/5OMN_uxBjK6rbRaKxIoADgvdfdg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/5OMN_uxBjK6rbRaKxIoADgvdfdg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/5OMN_uxBjK6rbRaKxIoADgvdfdg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/JavaserverFaces/~4/dJ2yPYC2TTU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jsf-tr.blogspot.com/feeds/4076789311587028726/comments/default" title="Kayıt Yorumları" /><link rel="replies" type="text/html" href="http://jsf-tr.blogspot.com/2010/05/ornek-proje-online-snav-04-snav.html#comment-form" title="3 Yorum" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2509844667593749835/posts/default/4076789311587028726?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2509844667593749835/posts/default/4076789311587028726?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JavaserverFaces/~3/dJ2yPYC2TTU/ornek-proje-online-snav-04-snav.html" title="örnek proje : online sınav - 04 :: Sınav Yönetici - view katmanı - 1" /><author><name>ibrahim demir</name><uri>http://www.blogger.com/profile/14063980678411736699</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="23" src="http://4.bp.blogspot.com/_ELhi79hYqkg/S1mqZHoY-NI/AAAAAAAAAFA/RV2hY7WhL7U/S220/id.jpg" /></author><thr:total>3</thr:total><feedburner:origLink>http://jsf-tr.blogspot.com/2010/05/ornek-proje-online-snav-04-snav.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0cGQ3k9eCp7ImA9WxFaEUU.&quot;"><id>tag:blogger.com,1999:blog-2509844667593749835.post-9162510128586475162</id><published>2010-05-07T15:31:00.001+03:00</published><updated>2010-07-15T12:10:22.760+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-07-15T12:10:22.760+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Örnek Proje" /><title>örnek proje : online sınav - 03 :: Site şablonu hazırlama</title><content type="html">1) Eclipse üzerinde "sinav" adi ile yeni bir dynamic web project yaratalım. jsf 2.0 için gerekli jar dosyalarını kopyalayalım. Henüz veritabanı ile ilgili bir işlem yapmadığımız için mysql'in jdbc sürücü dosyasına ihtiyacımız yok.&lt;br /&gt;
&lt;br /&gt;
2) WebContent klasörünün altına resources adı ile yeni bir klasör yaratalım. Bu klasör jsf 2 ile beraber gelen resource management için kullanılan özel bir jsf klasörüdür.&lt;br /&gt;
&lt;br /&gt;
3) resources klasörü altında template.xhtml dosyasını yaratacağız bu dosya 4 ana kısımdan oluşacak&lt;br /&gt;
- başlık (dışarıdaki bir dosyadan gelecek)&lt;br /&gt;
- menü   (dışarıdaki bir dosyadan gelecek)&lt;br /&gt;
- mesaj &lt;br /&gt;
- içerik&lt;br /&gt;
&lt;br /&gt;
template.xhtml&lt;br /&gt;
&lt;pre class="brush: xml;"&gt;&amp;lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&amp;gt;
&amp;lt;html xmlns="http://www.w3.org/1999/xhtml"
 xmlns:h="http://java.sun.com/jsf/html"
 xmlns:f="http://java.sun.com/jsf/core"
 xmlns:p="http://primefaces.prime.com.tr/ui"
 xmlns:ui="http://java.sun.com/jsf/facelets"&amp;gt;
&amp;lt;h:head&amp;gt;
 &amp;lt;title&amp;gt;Sınav :: ${title}&amp;lt;/title&amp;gt;
 &amp;lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8" /&amp;gt;
 &amp;lt;h:outputStylesheet name="template.css" target="head" /&amp;gt;
&amp;lt;/h:head&amp;gt;
&amp;lt;h:body&amp;gt;
 &amp;lt;div id="container"&amp;gt;

 &amp;lt;div id="header"&amp;gt;&amp;lt;ui:include src="header.xhtml" /&amp;gt;&amp;lt;/div&amp;gt;

 &amp;lt;div id="menu"&amp;gt;&amp;lt;ui:include src="menu.xhtml" /&amp;gt;&amp;lt;/div&amp;gt;

 &amp;lt;div id="message"&amp;gt;&amp;lt;h:messages /&amp;gt;&amp;lt;/div&amp;gt;

 &amp;lt;div id="content"&amp;gt;&amp;lt;ui:insert name="content" /&amp;gt;&amp;lt;/div&amp;gt;

 &amp;lt;/div&amp;gt;
&amp;lt;/h:body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
header.xhtml&lt;br /&gt;
&lt;pre class="brush: xml;"&gt;&amp;lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&amp;gt;
&amp;lt;ui:composition xmlns="http://www.w3.org/1999/xhtml"
 xmlns:h="http://java.sun.com/jsf/html"
 xmlns:f="http://java.sun.com/jsf/core"
 xmlns:ui="http://java.sun.com/jsf/facelets"
 xmlns:p="http://primefaces.prime.com.tr/ui"&amp;gt;
 &amp;lt;table width="100%"&amp;gt;
  &amp;lt;tr valign="middle"&amp;gt;
   &amp;lt;td align="left" rowspan="3"&amp;gt;&amp;lt;h:graphicImage
    value="/resources/logo.png" /&amp;gt;&amp;lt;/td&amp;gt;
  &amp;lt;/tr&amp;gt;
  &amp;lt;tr&amp;gt;
   &amp;lt;td align="right"&amp;gt;&amp;lt;a href="#"&amp;gt;Online Sınav Sistemi &amp;lt;/a&amp;gt;&amp;lt;/td&amp;gt;
  &amp;lt;/tr&amp;gt;
  &amp;lt;tr&amp;gt;
   &amp;lt;td align="right"&amp;gt;&amp;lt;h:form id="loginForm" prependId="false"&amp;gt;
    &amp;lt;h:panelGrid columns="3" rendered="#{!authBean.logged}"&amp;gt;
     &amp;lt;h:inputText value="" style="width:80px;" /&amp;gt;
     &amp;lt;h:inputSecret value="" style="width:80px" /&amp;gt;
     &amp;lt;h:commandButton value="Giriş" action="NONE" style="width:60px" /&amp;gt;
    &amp;lt;/h:panelGrid&amp;gt;
   &amp;lt;/h:form&amp;gt;&amp;lt;/td&amp;gt;
  &amp;lt;/tr&amp;gt;
 &amp;lt;/table&amp;gt;
&amp;lt;/ui:composition&amp;gt;
&lt;/pre&gt;&lt;br /&gt;
menu.xhtml&lt;br /&gt;
&lt;pre class="brush: xml;"&gt;&amp;lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&amp;gt;
&amp;lt;ui:composition xmlns="http://www.w3.org/1999/xhtml"
 xmlns:h="http://java.sun.com/jsf/html"
 xmlns:f="http://java.sun.com/jsf/core"
 xmlns:ui="http://java.sun.com/jsf/facelets"&amp;gt;

 &amp;lt;table style="height: 100%;" cellspacing="5"&amp;gt;
  &amp;lt;tr&amp;gt;
   &amp;lt;td&amp;gt;
    &amp;lt;h:link value="Ana Sayfa" outcome="/index.xhtml"/&amp;gt;
   &amp;lt;/td&amp;gt;
   &amp;lt;td&amp;gt;
    &amp;lt;h:link value="Açık Sınavlar" outcome="/examOpens.xhtml"/&amp;gt;
   &amp;lt;/td&amp;gt;

   &amp;lt;td&amp;gt;
    &amp;lt;h:link value="Sınav sonuçları" outcome="/examResults.xhtml"/&amp;gt;
   &amp;lt;/td&amp;gt;

   &amp;lt;td&amp;gt;
    &amp;lt;h:link value="Yeni Sınav oluştur" outcome="examAdd.xhtml"/&amp;gt;
   &amp;lt;/td&amp;gt;
   &amp;lt;td&amp;gt;
    &amp;lt;h:link value="Sınav Listesi" outcome="examList.xhtml"/&amp;gt;
   &amp;lt;/td&amp;gt;
   &amp;lt;td&amp;gt;
    &amp;lt;h:link value="Sınav Değerlendirme" outcome="examEval.xhtml"/&amp;gt;
   &amp;lt;/td&amp;gt;
   &amp;lt;td&amp;gt;
    &amp;lt;h:link value="Kullanıcılar" outcome="users.xhtml"/&amp;gt;
   &amp;lt;/td&amp;gt;
   &amp;lt;td&amp;gt;
    &amp;lt;h:link value="Roller" outcome="roles.xhtml"/&amp;gt;
   &amp;lt;/td&amp;gt;
   &amp;lt;td&amp;gt;
    &amp;lt;h:link value="Sayfalar" outcome="pages.xhtml"/&amp;gt;
   &amp;lt;/td&amp;gt;
   &amp;lt;td&amp;gt;
    &amp;lt;h:link value="Yetkilendirme" outcome="authorize.xhtml"/&amp;gt;
   &amp;lt;/td&amp;gt;
  &amp;lt;/tr&amp;gt;
 &amp;lt;/table&amp;gt;
 

&amp;lt;/ui:composition&amp;gt;

&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
Bu menüde proje içerisinde kullanacağımız tüm menü adımları bulunuyor. Projenin yetki kontrolü aşamasına geldiğimizde bu menüyü değiştireceğiz. Şu ana kadar verilen dosyalar ile sayfa çalışır ancak template.css eklenmediğinden sayfa görüntüsü hoş olmayacaktır. &lt;br /&gt;
&lt;br /&gt;
template.css&lt;br /&gt;
&lt;pre class="brush: css"&gt;BODY {
 background-color: #FFF8DC;
 font-family: tohama,verdana;
 font-size: 12px;
}

#container {
 margin: 0px;
 width: 100%;
 color: black;
}

#header {
 height: 70px;
 background-color: #FFF8DC;
 border: 1px solid olive;
 padding: 5px
}

#header a {
 color: black;
 font-weight: bold;
 text-decoration: none;
 font-size: xx-large;
}

#menu {
 height: 30px;
 vertical-align: middle;
 background-color: #DEB887;
 border-left: 1px solid olive;
 border-bottom: 1px solid olive;
 border-right: 1px solid olive;
 font-weight: bold;
}

#menu a:hover {
 color: #FFF8DC;
}

#content {
 margin-top: 15px;
 padding: 5px;
}
&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
web.xml&lt;br /&gt;
&lt;pre class="brush: xml"&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;
&amp;lt;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_2_5.xsd"
 id="WebApp_ID" version="2.5"&amp;gt;
 &amp;lt;display-name&amp;gt;sinav&amp;lt;/display-name&amp;gt;

 &amp;lt;context-param&amp;gt;
  &amp;lt;param-name&amp;gt;javax.faces.DEFAULT_SUFFIX&amp;lt;/param-name&amp;gt;
  &amp;lt;param-value&amp;gt;.xhtml&amp;lt;/param-value&amp;gt;
 &amp;lt;/context-param&amp;gt;

 &amp;lt;context-param&amp;gt;
  &amp;lt;param-name&amp;gt;javax.faces.STATE_SAVING_METHOD&amp;lt;/param-name&amp;gt;
  &amp;lt;param-value&amp;gt;server&amp;lt;/param-value&amp;gt;
 &amp;lt;/context-param&amp;gt;
 

 &amp;lt;!-- Faces Servlet --&amp;gt;
 &amp;lt;servlet&amp;gt;
  &amp;lt;servlet-name&amp;gt;Faces Servlet&amp;lt;/servlet-name&amp;gt;
  &amp;lt;servlet-class&amp;gt;javax.faces.webapp.FacesServlet&amp;lt;/servlet-class&amp;gt;
  &amp;lt;load-on-startup&amp;gt; 1 &amp;lt;/load-on-startup&amp;gt;
 &amp;lt;/servlet&amp;gt;

 &amp;lt;!-- Faces Servlet Mapping --&amp;gt;
 &amp;lt;servlet-mapping&amp;gt;
  &amp;lt;servlet-name&amp;gt;Faces Servlet&amp;lt;/servlet-name&amp;gt;
  &amp;lt;url-pattern&amp;gt;*.jsf&amp;lt;/url-pattern&amp;gt;
 &amp;lt;/servlet-mapping&amp;gt;

 &amp;lt;welcome-file-list&amp;gt;
  &amp;lt;welcome-file&amp;gt;index.html&amp;lt;/welcome-file&amp;gt;
 &amp;lt;/welcome-file-list&amp;gt;
&amp;lt;/web-app&amp;gt;
&lt;/pre&gt;&lt;br /&gt;
index.html&lt;br /&gt;
&lt;pre class="brush: xml"&gt;&amp;lt;meta http-equiv="refresh" content="0;url=index.jsf"&amp;gt;
&lt;/pre&gt;&lt;br /&gt;
index.xhtml&lt;br /&gt;
&lt;pre class="brush: xml"&gt;&amp;lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&amp;gt;
&amp;lt;ui:composition xmlns="http://www.w3.org/1999/xhtml"
 xmlns:h="http://java.sun.com/jsf/html"
 xmlns:f="http://java.sun.com/jsf/core"
 xmlns:ui="http://java.sun.com/jsf/facelets"
 template="/resources/template.xhtml"&amp;gt;

 &amp;lt;ui:param name="title" value="Ana Sayfa" /&amp;gt;
 &amp;lt;ui:define name="content"&amp;gt;

  &amp;lt;h1&amp;gt;Uzaktan eğitim sistemi&amp;lt;/h1&amp;gt;
  &amp;lt;h2&amp;gt;Online Sınav Sistem'ine hoşgeldiniz...&amp;lt;/h2&amp;gt;

 &amp;lt;/ui:define&amp;gt;
&amp;lt;/ui:composition&amp;gt;
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2509844667593749835-9162510128586475162?l=jsf-tr.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/eu__r4tR_fy_BQj2orN36uEOG8s/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/eu__r4tR_fy_BQj2orN36uEOG8s/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/eu__r4tR_fy_BQj2orN36uEOG8s/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/eu__r4tR_fy_BQj2orN36uEOG8s/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/JavaserverFaces/~4/zbrPMh6s99Q" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jsf-tr.blogspot.com/feeds/9162510128586475162/comments/default" title="Kayıt Yorumları" /><link rel="replies" type="text/html" href="http://jsf-tr.blogspot.com/2010/05/ornek-proje-online-snav-03-site-sablonu.html#comment-form" title="0 Yorum" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2509844667593749835/posts/default/9162510128586475162?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2509844667593749835/posts/default/9162510128586475162?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JavaserverFaces/~3/zbrPMh6s99Q/ornek-proje-online-snav-03-site-sablonu.html" title="örnek proje : online sınav - 03 :: Site şablonu hazırlama" /><author><name>ibrahim demir</name><uri>http://www.blogger.com/profile/14063980678411736699</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="23" src="http://4.bp.blogspot.com/_ELhi79hYqkg/S1mqZHoY-NI/AAAAAAAAAFA/RV2hY7WhL7U/S220/id.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://jsf-tr.blogspot.com/2010/05/ornek-proje-online-snav-03-site-sablonu.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEIGQ34-cSp7ImA9WxFWFUg.&quot;"><id>tag:blogger.com,1999:blog-2509844667593749835.post-7710948967343584776</id><published>2010-05-03T19:30:00.000+03:00</published><updated>2010-06-03T12:15:22.059+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-06-03T12:15:22.059+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Örnek Proje" /><title>örnek proje : online sınav - 02 - Ekran tasarımları</title><content type="html">Merhaba ,&lt;br /&gt;
&lt;br /&gt;
Projeyi oluşturken önce ekranların nasıl görünmesi gerektiği ile ilgili fikirlerimi aşağıda gördüğünüz gibi taslak olarak oluşturuyorum. Bu ekranlar bana veritabanı oluşturken fikir verecek. Ama öncelikle bu fikirlerimden yola çıkarak bir view katmanı yazabilirim. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Öğrenci ekranları :&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_ELhi79hYqkg/TAN1VVyacaI/AAAAAAAAAGk/nNbC5VAm27o/s1600/ogrenci_acik_sinav.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://1.bp.blogspot.com/_ELhi79hYqkg/TAN1VVyacaI/AAAAAAAAAGk/nNbC5VAm27o/s400/ogrenci_acik_sinav.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_ELhi79hYqkg/TAN1XBigUSI/AAAAAAAAAGs/V6lgyY3Wv7c/s1600/ogrenci_sinav_cevaplama.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://2.bp.blogspot.com/_ELhi79hYqkg/TAN1XBigUSI/AAAAAAAAAGs/V6lgyY3Wv7c/s400/ogrenci_sinav_cevaplama.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_ELhi79hYqkg/TAN1YmKmF3I/AAAAAAAAAG0/68kZuHh8OYA/s1600/ogrenci_sinav_sonuc.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://2.bp.blogspot.com/_ELhi79hYqkg/TAN1YmKmF3I/AAAAAAAAAG0/68kZuHh8OYA/s400/ogrenci_sinav_sonuc.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Sınav Yöneticisi Ekranları :&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_ELhi79hYqkg/TAN7ZiwBA-I/AAAAAAAAAHU/Rkwkr3IrzDE/s1600/s%C4%B1nav_yonetici_yeni_s%C4%B1nav.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://1.bp.blogspot.com/_ELhi79hYqkg/TAN7ZiwBA-I/AAAAAAAAAHU/Rkwkr3IrzDE/s400/s%C4%B1nav_yonetici_yeni_s%C4%B1nav.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_ELhi79hYqkg/TAN7YR5B-BI/AAAAAAAAAHM/7tKKqeqqUSc/s1600/s%C4%B1nav_yonetici_soru_girisi.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="238" src="http://4.bp.blogspot.com/_ELhi79hYqkg/TAN7YR5B-BI/AAAAAAAAAHM/7tKKqeqqUSc/s400/s%C4%B1nav_yonetici_soru_girisi.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_ELhi79hYqkg/TAN7VktqkwI/AAAAAAAAAG8/z2pJp19VfJE/s1600/s%C4%B1nav_yonetici_cevap_anahtari.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="238" src="http://2.bp.blogspot.com/_ELhi79hYqkg/TAN7VktqkwI/AAAAAAAAAG8/z2pJp19VfJE/s400/s%C4%B1nav_yonetici_cevap_anahtari.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_ELhi79hYqkg/TAN7XXVzMeI/AAAAAAAAAHE/y4NSR_WUMbM/s1600/s%C4%B1nav_yonetici_sinav_listesi.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="238" src="http://2.bp.blogspot.com/_ELhi79hYqkg/TAN7XXVzMeI/AAAAAAAAAHE/y4NSR_WUMbM/s400/s%C4%B1nav_yonetici_sinav_listesi.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sistem Yöneticisi ekranları :&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_ELhi79hYqkg/TAOcqLGaxGI/AAAAAAAAAHc/xhaZ6MeQaVM/s1600/sistem_yoneticisi_kullanici_tanimlama.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="238" src="http://4.bp.blogspot.com/_ELhi79hYqkg/TAOcqLGaxGI/AAAAAAAAAHc/xhaZ6MeQaVM/s400/sistem_yoneticisi_kullanici_tanimlama.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_ELhi79hYqkg/TAOcr7zpjHI/AAAAAAAAAHk/RwlBrLlzZ3M/s1600/sistem_yoneticisi_rol_sayfa_iliskisi.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="238" src="http://2.bp.blogspot.com/_ELhi79hYqkg/TAOcr7zpjHI/AAAAAAAAAHk/RwlBrLlzZ3M/s400/sistem_yoneticisi_rol_sayfa_iliskisi.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_ELhi79hYqkg/TAOcuFwPVrI/AAAAAAAAAHs/R-4dPOD4cpU/s1600/sistem_yoneticisi_rol_tanimlama.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://1.bp.blogspot.com/_ELhi79hYqkg/TAOcuFwPVrI/AAAAAAAAAHs/R-4dPOD4cpU/s400/sistem_yoneticisi_rol_tanimlama.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_ELhi79hYqkg/TAOcv0nh3sI/AAAAAAAAAH0/5WBlOZe0noE/s1600/sistem_yoneticisi_yetkilendirme.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://2.bp.blogspot.com/_ELhi79hYqkg/TAOcv0nh3sI/AAAAAAAAAH0/5WBlOZe0noE/s400/sistem_yoneticisi_yetkilendirme.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2509844667593749835-7710948967343584776?l=jsf-tr.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/52PQby0pJ2rSbdZaY6qo6Fs9vbE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/52PQby0pJ2rSbdZaY6qo6Fs9vbE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/52PQby0pJ2rSbdZaY6qo6Fs9vbE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/52PQby0pJ2rSbdZaY6qo6Fs9vbE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/JavaserverFaces/~4/JvjQH5jNo2g" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jsf-tr.blogspot.com/feeds/7710948967343584776/comments/default" title="Kayıt Yorumları" /><link rel="replies" type="text/html" href="http://jsf-tr.blogspot.com/2010/05/ornek-proje-online-snav-02-ekran.html#comment-form" title="2 Yorum" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2509844667593749835/posts/default/7710948967343584776?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2509844667593749835/posts/default/7710948967343584776?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JavaserverFaces/~3/JvjQH5jNo2g/ornek-proje-online-snav-02-ekran.html" title="örnek proje : online sınav - 02 - Ekran tasarımları" /><author><name>ibrahim demir</name><uri>http://www.blogger.com/profile/14063980678411736699</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="23" src="http://4.bp.blogspot.com/_ELhi79hYqkg/S1mqZHoY-NI/AAAAAAAAAFA/RV2hY7WhL7U/S220/id.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_ELhi79hYqkg/TAN1VVyacaI/AAAAAAAAAGk/nNbC5VAm27o/s72-c/ogrenci_acik_sinav.png" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://jsf-tr.blogspot.com/2010/05/ornek-proje-online-snav-02-ekran.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEIEQHk9eCp7ImA9WxFWFUg.&quot;"><id>tag:blogger.com,1999:blog-2509844667593749835.post-6705992097521591408</id><published>2010-05-01T22:52:00.000+03:00</published><updated>2010-06-03T12:15:01.760+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-06-03T12:15:01.760+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Örnek Proje" /><title>örnek proje : online sınav - 01 :: Başlangıç</title><content type="html">JSF'de tümüyle çalışan  bir örnek proje yapacağız. Küçük bir projede olabilecek tüm durumları içermesi için online sınav sistemi yapmaya karar verdim. Çok karmaşık çalışma olmayacak ancak proje geliştirme açısından tam bir örnek olması için elimden geleni yapacağım . Aşağıda programın temel işlevleri yer almaktadır.&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;Programın genel yapısı&lt;/h2&gt;&lt;br /&gt;
&lt;b&gt;Öğrenci İşlemleri&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Sisteme giriş &lt;/li&gt;
&lt;li&gt;Açık sınavları listeme ve cevaplama&lt;/li&gt;
&lt;li&gt;Tamamlanan sınav sonuçlarını görüntüleme&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;b&gt;Eğitmen İşlemleri&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Sisteme giriş&lt;/li&gt;
&lt;li&gt;Yeni sınav oluşturma&lt;/li&gt;
&lt;li&gt;Sınav soru ve cevap girişi&lt;/li&gt;
&lt;li&gt;Cevap Anahtarı girişi&lt;/li&gt;
&lt;li&gt;Sınav yayınlama&lt;/li&gt;
&lt;li&gt;Sınavları değerlendirme&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;b&gt;Yönetici işlemleri&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Sistem girişi&lt;/li&gt;
&lt;li&gt;Kullanıcı yönetimi&lt;/li&gt;
&lt;li&gt;Yetkilendirme işlemleri&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;br /&gt;
projenin teknolojik alt yapısı &lt;br /&gt;
&lt;br /&gt;
sunucu: tomcat 6.20&lt;br /&gt;
framework : mojarra jsf 2.02&lt;br /&gt;
ide : eclipse 3.5 + jboss tools&lt;br /&gt;
veritabano : mysql 5.1&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2509844667593749835-6705992097521591408?l=jsf-tr.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/45Ap67-pHxt1tF4IUSDMuhIrH2c/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/45Ap67-pHxt1tF4IUSDMuhIrH2c/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/45Ap67-pHxt1tF4IUSDMuhIrH2c/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/45Ap67-pHxt1tF4IUSDMuhIrH2c/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/JavaserverFaces/~4/OBYZ9zgQKQs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jsf-tr.blogspot.com/feeds/6705992097521591408/comments/default" title="Kayıt Yorumları" /><link rel="replies" type="text/html" href="http://jsf-tr.blogspot.com/2010/04/ornek-proje-online-snav-01.html#comment-form" title="2 Yorum" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2509844667593749835/posts/default/6705992097521591408?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2509844667593749835/posts/default/6705992097521591408?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JavaserverFaces/~3/OBYZ9zgQKQs/ornek-proje-online-snav-01.html" title="örnek proje : online sınav - 01 :: Başlangıç" /><author><name>ibrahim demir</name><uri>http://www.blogger.com/profile/14063980678411736699</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="23" src="http://4.bp.blogspot.com/_ELhi79hYqkg/S1mqZHoY-NI/AAAAAAAAAFA/RV2hY7WhL7U/S220/id.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://jsf-tr.blogspot.com/2010/04/ornek-proje-online-snav-01.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkMERn86fyp7ImA9WxFSGEg.&quot;"><id>tag:blogger.com,1999:blog-2509844667593749835.post-1077816939159462882</id><published>2010-04-21T14:35:00.003+03:00</published><updated>2010-04-21T14:46:47.117+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-04-21T14:46:47.117+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="jsf 2" /><category scheme="http://www.blogger.com/atom/ns#" term="ajax" /><title>jsf 2 ajax kullanımı</title><content type="html">Jsf 2 ile beraber jsf framework'ünde ajax desteği geldi.Bu desteği sağlayan bileşen f:ajax'dır. f:ajax dom tabanlı olarak bileşen id'leri ile işlem yapar.f:ajax'sin temel özellikleri:&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;execute:&lt;/b&gt; hangi bileşenlerin sunucu tarafına gönderileceğini belirlendiği özellikdir. Birden fazla bileşen gönderilecek ise bu değerler virgül ile ayrılır.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;render:&lt;/b&gt; hangi bileşenlerin yeniden oluşturulacağını belirlendiği özelliktir. &lt;br /&gt;
&lt;br /&gt;
Şimdilik  bu kadar özellik bize yetecektir. Birde 2 özelliğin kullanabildiği özel parameterler var&lt;br /&gt;
&lt;b&gt;@all :&lt;/b&gt; tüm sayfayı gönderir yada render eder&lt;br /&gt;
&lt;b&gt;@form : &lt;/b&gt; ait olduğu form'u gönderir yada render eder&lt;br /&gt;
&lt;b&gt;@this : &lt;/b&gt; sadece ait olduğu bileşeni gönderir yada render eder.&lt;br /&gt;
&lt;br /&gt;
Örnek : &lt;br /&gt;
&lt;pre class="brush :xml;"&gt;&amp;lt;h:commandButton value="Deneme" action="#{denemeBean.action}"&amp;gt;
    &amp;lt;f:ajax execute="@all" render="@form" /&amp;gt;
&amp;lt;h:commandButton /&amp;gt;
&lt;/pre&gt;Bu kod tüm sayfayı server'a gönderir ve sadece bu bileşenin ait olduğu formu render eder.&lt;br /&gt;
&lt;br /&gt;
Şimdi jsf2 ile ilk ajax örneğimiz yapalım. Daha önce viewscope anlatırken yaptığımın sayaç örneğini ajax ile yeniden yapacağız.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;ajax1.xhtml&lt;/b&gt;&lt;br /&gt;
&lt;pre class="brush :xml;"&gt;&amp;lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&amp;gt;
&amp;lt;html xmlns="http://www.w3.org/1999/xhtml"
 xmlns:h="http://java.sun.com/jsf/html"
 xmlns:f="http://java.sun.com/jsf/core"
 xmlns:ui="http://java.sun.com/jsf/facelets"&amp;gt;
&amp;lt;h:head&amp;gt;
 &amp;lt;title&amp;gt;Ajax 1&amp;lt;/title&amp;gt;
&amp;lt;/h:head&amp;gt;
&amp;lt;h:body&amp;gt;
 &amp;lt;h:form prependId="false"&amp;gt;
  &amp;lt;h:commandButton action="#{ajax1Bean.increase}" value="Say"&amp;gt;
   &amp;lt;f:ajax execute="@form" render="countId" /&amp;gt;
  &amp;lt;/h:commandButton&amp;gt;
  &amp;lt;br /&amp;gt;
  &amp;lt;h:outputText id="countId" value="#{ajax1Bean.count}" /&amp;gt;
 &amp;lt;/h:form&amp;gt;
&amp;lt;/h:body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/pre&gt;&lt;br /&gt;
&lt;b&gt;Ajax1Bean.java&lt;/b&gt;&lt;br /&gt;
&lt;pre class="brush :java;"&gt;import java.io.Serializable;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

@ManagedBean(name = "ajax1Bean")
@ViewScoped
public class Ajax1Bean implements Serializable {

 private int count;

 public int getCount() {
  return count;
 }

 public void setCount(int count) {
  this.count = count;
 }

 public void increase() {
  count++;
 }
}
&lt;/pre&gt;&lt;br /&gt;
Bu örnekte button her tıklandığında form submit edilir ve değeri gösteren outputText yeniden render edilir.&lt;br /&gt;
&lt;br /&gt;
Bir örnek daha yapacağım. Aslında bu örnek gerçekte pek ihtiyacınız olamayan bir durum ama ajax'ın çok farklı durumlar için kullanılabileceğini bir örneğidir. Bir kutuyu sayfa içererisinde buton yardımı ile hareket ettireceğiz.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;ajax2.xhtml&lt;/b&gt;&lt;br /&gt;
&lt;pre class="brush :xml;"&gt;&amp;lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&amp;gt;
&amp;lt;html xmlns="http://www.w3.org/1999/xhtml"
 xmlns:h="http://java.sun.com/jsf/html"
 xmlns:f="http://java.sun.com/jsf/core"
 xmlns:ui="http://java.sun.com/jsf/facelets"&amp;gt;
&amp;lt;h:head&amp;gt;
 &amp;lt;title&amp;gt;Ajax 2&amp;lt;/title&amp;gt;
 &amp;lt;style type="text/css"&amp;gt;
#box {
 position: absolute;
 height: 50px;
 width: 50px;
 background-color: olive;
}
&amp;lt;/style&amp;gt;
&amp;lt;/h:head&amp;gt;
&amp;lt;h:body&amp;gt;
 &amp;lt;h:form prependId="false"&amp;gt;
  &amp;lt;h:panelGrid columns="3"&amp;gt;

   &amp;lt;h:panelGroup /&amp;gt;
   &amp;lt;h:commandButton action="#{ajax2Bean.moveUp}" value="Yukarı"&amp;gt;
    &amp;lt;f:ajax render="box" /&amp;gt;
   &amp;lt;/h:commandButton&amp;gt;
   &amp;lt;h:panelGroup /&amp;gt;

   &amp;lt;h:commandButton action="#{ajax2Bean.moveLeft}" value="Sola"&amp;gt;
    &amp;lt;f:ajax render="box" /&amp;gt;
   &amp;lt;/h:commandButton&amp;gt;
   &amp;lt;h:panelGroup /&amp;gt;
   &amp;lt;h:commandButton action="#{ajax2Bean.moveRight}" value="Sağa"&amp;gt;
    &amp;lt;f:ajax render="box" /&amp;gt;
   &amp;lt;/h:commandButton&amp;gt;

   &amp;lt;h:panelGroup /&amp;gt;
   &amp;lt;h:commandButton action="#{ajax2Bean.moveDown}" value="Aşağı"&amp;gt;
    &amp;lt;f:ajax render="box" /&amp;gt;
   &amp;lt;/h:commandButton&amp;gt;
   &amp;lt;h:panelGroup /&amp;gt;
  &amp;lt;/h:panelGrid&amp;gt;
  &amp;lt;h:panelGroup id="box"
   style="left:#{ajax2Bean.left}px;top:#{ajax2Bean.top}px;"&amp;gt;
   Box
  &amp;lt;/h:panelGroup&amp;gt;
 &amp;lt;/h:form&amp;gt;
&amp;lt;/h:body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/pre&gt;&lt;br /&gt;
&lt;b&gt;Ajax2Bean.java&lt;/b&gt;&lt;br /&gt;
&lt;pre class="brush :java;"&gt;import java.io.Serializable;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

@ManagedBean(name = "ajax2Bean")
@ViewScoped
public class Ajax2Bean implements Serializable {

 private final static Integer LEFT_MIN = 10;
 private final static Integer LEFT_MAX = 900;
 private final static Integer TOP_MIN = 100;
 private final static Integer TOP_MAX = 700;
 private int left = LEFT_MIN;
 private int top = TOP_MIN;

 public int getLeft() {
  return left;
 }

 public void setLeft(int left) {
  this.left = left;
 }

 public int getTop() {
  return top;
 }

 public void setTop(int top) {
  this.top = top;
 }

 public void moveLeft() {
  if (left &gt; LEFT_MIN)
   left = left - 10;
 }

 public void moveRight() {
  if (left &lt; LEFT_MAX)
   left = left + 10;
 }

 public void moveUp() {
  if (top &gt; TOP_MIN)
   top = top - 10;
 }

 public void moveDown() {
  if (top &lt; TOP_MAX)
   top = top + 10;
 }

}
&lt;/pre&gt;
Bu yazı hazırlanırken kaynak sayfa &lt;a href="http://j4fry.blogspot.com/2009/06/jsf-20-ajax-overview.html"&gt;j4fry&lt;/a&gt;blogdur&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2509844667593749835-1077816939159462882?l=jsf-tr.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/y_dFKOV9OecWXgX-QFxIrfEjZgw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/y_dFKOV9OecWXgX-QFxIrfEjZgw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/y_dFKOV9OecWXgX-QFxIrfEjZgw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/y_dFKOV9OecWXgX-QFxIrfEjZgw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/JavaserverFaces/~4/0_vHxFRKSeM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jsf-tr.blogspot.com/feeds/1077816939159462882/comments/default" title="Kayıt Yorumları" /><link rel="replies" type="text/html" href="http://jsf-tr.blogspot.com/2010/04/jsf-2-ajax-kullanm.html#comment-form" title="0 Yorum" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2509844667593749835/posts/default/1077816939159462882?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2509844667593749835/posts/default/1077816939159462882?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JavaserverFaces/~3/0_vHxFRKSeM/jsf-2-ajax-kullanm.html" title="jsf 2 ajax kullanımı" /><author><name>ibrahim demir</name><uri>http://www.blogger.com/profile/14063980678411736699</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="23" src="http://4.bp.blogspot.com/_ELhi79hYqkg/S1mqZHoY-NI/AAAAAAAAAFA/RV2hY7WhL7U/S220/id.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://jsf-tr.blogspot.com/2010/04/jsf-2-ajax-kullanm.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEAMQ3o7eyp7ImA9WxFRFU8.&quot;"><id>tag:blogger.com,1999:blog-2509844667593749835.post-2726179903510303265</id><published>2010-04-19T22:30:00.000+03:00</published><updated>2010-04-29T10:39:42.403+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-04-29T10:39:42.403+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Kurulum" /><category scheme="http://www.blogger.com/atom/ns#" term="myfaces" /><title>myfaces 2.0 kurulumu</title><content type="html">Birkaç hafta önce jsf 2.0'ın muadili olan myfaces 2.0 yayınlandı. Myfaces 2.0 için eclipse üzerinde kurulumu anlatacağım.&lt;br /&gt;
myfaces2 adında yeni bir proje yaratalım.&lt;br /&gt;
Bu &lt;a href="http://myfaces.apache.org/download.html"&gt;sayfadan&lt;/a&gt; myfaces-core-2.X.X-bin.zip dosyasını indirip açın. &lt;br /&gt;
lib klasörü içindeki tüm dosyaları WEB-INF\lib klasörünün altına taşıyalım&lt;br /&gt;
&lt;br /&gt;
Dosya Listesi&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;commons-beanutils-1.7.0.jar&lt;/li&gt;
&lt;li&gt;commons-codec-1.3.jar&lt;/li&gt;
&lt;li&gt;commons-collections-3.2.jar&lt;/li&gt;
&lt;li&gt;commons-digester-1.8.jar&lt;/li&gt;
&lt;li&gt;commons-discovery-0.4.jar&lt;/li&gt;
&lt;li&gt;commons-logging-1.1.1.jar&lt;/li&gt;
&lt;li&gt;myfaces-api-2.0.0.jar&lt;/li&gt;
&lt;li&gt;myfaces-impl-2.0.0.jar&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;b&gt;web.xml&lt;/b&gt; dosyasını aşağıdaki gibi oluşturalım.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: xml;"&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;
&amp;lt;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_2_5.xsd" id="WebApp_ID" version="2.5"&amp;gt;
  &amp;lt;display-name&amp;gt;myfaces2&amp;lt;/display-name&amp;gt;
  
   &amp;lt;servlet&amp;gt;
  &amp;lt;servlet-name&amp;gt;Faces Servlet&amp;lt;/servlet-name&amp;gt;
  &amp;lt;servlet-class&amp;gt;javax.faces.webapp.FacesServlet&amp;lt;/servlet-class&amp;gt;
  &amp;lt;load-on-startup&amp;gt; 1 &amp;lt;/load-on-startup&amp;gt;
 &amp;lt;/servlet&amp;gt;

 &amp;lt;!-- Faces Servlet Mapping --&amp;gt;
 &amp;lt;servlet-mapping&amp;gt;
  &amp;lt;servlet-name&amp;gt;Faces Servlet&amp;lt;/servlet-name&amp;gt;
  &amp;lt;url-pattern&amp;gt;*.jsf&amp;lt;/url-pattern&amp;gt;
 &amp;lt;/servlet-mapping&amp;gt;
  
  &amp;lt;welcome-file-list&amp;gt;
    &amp;lt;welcome-file&amp;gt;index.html&amp;lt;/welcome-file&amp;gt;
    &amp;lt;welcome-file&amp;gt;index.htm&amp;lt;/welcome-file&amp;gt;
    &amp;lt;welcome-file&amp;gt;index.jsp&amp;lt;/welcome-file&amp;gt;
    &amp;lt;welcome-file&amp;gt;default.html&amp;lt;/welcome-file&amp;gt;
    &amp;lt;welcome-file&amp;gt;default.htm&amp;lt;/welcome-file&amp;gt;
    &amp;lt;welcome-file&amp;gt;default.jsp&amp;lt;/welcome-file&amp;gt;
  &amp;lt;/welcome-file-list&amp;gt;
&amp;lt;/web-app&amp;gt;
&lt;/pre&gt;&lt;br /&gt;
&lt;b&gt;demo.xhtml&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: xml;"&gt;&amp;lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&amp;gt;
&amp;lt;html xmlns="http://www.w3.org/1999/xhtml"
 xmlns:h="http://java.sun.com/jsf/html"
 xmlns:f="http://java.sun.com/jsf/core"
 xmlns:ui="http://java.sun.com/jsf/facelets"&amp;gt;

&amp;lt;h:head&amp;gt;
 &amp;lt;title&amp;gt;Ana Sayfa&amp;lt;/title&amp;gt;
&amp;lt;/h:head&amp;gt;
&amp;lt;h:body&amp;gt;
 &amp;lt;h:outputText value="myfaces 2 Deneme" /&amp;gt;
&amp;lt;/h:body&amp;gt;

&amp;lt;/html&amp;gt;
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2509844667593749835-2726179903510303265?l=jsf-tr.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/rHBCvWebAx85mYg2aegCmK4QsiU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/rHBCvWebAx85mYg2aegCmK4QsiU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/rHBCvWebAx85mYg2aegCmK4QsiU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/rHBCvWebAx85mYg2aegCmK4QsiU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/JavaserverFaces/~4/37ZSoynb3i0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jsf-tr.blogspot.com/feeds/2726179903510303265/comments/default" title="Kayıt Yorumları" /><link rel="replies" type="text/html" href="http://jsf-tr.blogspot.com/2010/04/myfaces-20-kurulumu.html#comment-form" title="1 Yorum" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2509844667593749835/posts/default/2726179903510303265?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2509844667593749835/posts/default/2726179903510303265?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JavaserverFaces/~3/37ZSoynb3i0/myfaces-20-kurulumu.html" title="myfaces 2.0 kurulumu" /><author><name>ibrahim demir</name><uri>http://www.blogger.com/profile/14063980678411736699</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="23" src="http://4.bp.blogspot.com/_ELhi79hYqkg/S1mqZHoY-NI/AAAAAAAAAFA/RV2hY7WhL7U/S220/id.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://jsf-tr.blogspot.com/2010/04/myfaces-20-kurulumu.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEINSXo7fCp7ImA9WxBaE0g.&quot;"><id>tag:blogger.com,1999:blog-2509844667593749835.post-3763189588458290447</id><published>2010-03-06T19:51:00.000+02:00</published><updated>2010-03-23T15:56:38.404+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-23T15:56:38.404+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Kurulum" /><category scheme="http://www.blogger.com/atom/ns#" term="myfaces" /><title>myFaces 1.2 kurulumu - xhtml</title><content type="html">Tıpkı mojarra da olduğu gib Myfaces 1.2 jsp kurulumuna ek olarak facelet içinde ortamı kurabiliriz.&lt;br /&gt;
Eclipse'te "mydemo2" isimli dynamic web project oluşturalım. &lt;br /&gt;
Myfaces'in download sayfasından Myfaces 1.2.X versiyonlu zip dosyasının indirin. Dosyası açıtından sonra lib klasörü içerisindeki jar dosyalarını WEB-INF\lib klasörüne kopyalayın. Örneğimizi facelet sayfası şeklinde yapacağımız için jsf-facelet.jar dosyasını da WEB-INF\lib klasörüne eklemek gerekiyor. jar dosylarının tam listesi aşağıdadır.&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;commons-beanutils-1.7.0.jar &lt;/li&gt;
&lt;li&gt;commons-codec-1.3.jar  &lt;/li&gt;
&lt;li&gt;commons-collections-3.2.jar  &lt;/li&gt;
&lt;li&gt;commons-digester-1.8.jar  &lt;/li&gt;
&lt;li&gt;commons-discovery-0.4.jar  &lt;/li&gt;
&lt;li&gt;commons-logging-1.1.1.jar  &lt;/li&gt;
&lt;li&gt;jsf-facelet.jar  &lt;/li&gt;
&lt;li&gt;myfaces-api-1.2.8.jar  &lt;/li&gt;
&lt;li&gt;myfaces-impl-1.2.8.jar  &lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
web.xml &lt;br /&gt;
&lt;pre class="brush: xml;"&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;
&amp;lt;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_2_5.xsd"
 id="WebApp_ID" version="2.5"&amp;gt;
 &amp;lt;display-name&amp;gt;mydemo&amp;lt;/display-name&amp;gt;


 &amp;lt;!-- Faces Servlet --&amp;gt;
 &amp;lt;servlet&amp;gt;
  &amp;lt;servlet-name&amp;gt;Faces Servlet&amp;lt;/servlet-name&amp;gt;
  &amp;lt;servlet-class&amp;gt;javax.faces.webapp.FacesServlet&amp;lt;/servlet-class&amp;gt;
  &amp;lt;load-on-startup&amp;gt;1&amp;lt;/load-on-startup&amp;gt;
 &amp;lt;/servlet&amp;gt;


 &amp;lt;!-- Faces Servlet Mapping --&amp;gt;
 &amp;lt;servlet-mapping&amp;gt;
  &amp;lt;servlet-name&amp;gt;Faces Servlet&amp;lt;/servlet-name&amp;gt;
  &amp;lt;url-pattern&amp;gt;*.jsf&amp;lt;/url-pattern&amp;gt;
 &amp;lt;/servlet-mapping&amp;gt;


 &amp;lt;welcome-file-list&amp;gt;
  &amp;lt;welcome-file&amp;gt;index.html&amp;lt;/welcome-file&amp;gt;
 &amp;lt;/welcome-file-list&amp;gt;
&amp;lt;/web-app&amp;gt;
&lt;/pre&gt;&lt;br /&gt;
firstPage.xhtml&lt;br /&gt;
&lt;pre class="brush: xml;"&gt;&amp;lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&amp;gt;
&amp;lt;html xmlns="http://www.w3.org/1999/xhtml"
 xmlns:h="http://java.sun.com/jsf/html"
 xmlns:f="http://java.sun.com/jsf/core"
 xmlns:ui="http://java.sun.com/jsf/facelets"&amp;gt;

&amp;lt;head&amp;gt;
&amp;lt;title&amp;gt;mydemo2&amp;lt;/title&amp;gt;
&amp;lt;/head&amp;gt;

&amp;lt;body&amp;gt;
&amp;lt;h:outputText value="myfaces ile facelet sayfası" /&amp;gt;
&amp;lt;/body&amp;gt;

&amp;lt;/html&amp;gt;
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2509844667593749835-3763189588458290447?l=jsf-tr.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ZTO0WYM8WF0rF0NWVNfxTwmkyAU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ZTO0WYM8WF0rF0NWVNfxTwmkyAU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ZTO0WYM8WF0rF0NWVNfxTwmkyAU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ZTO0WYM8WF0rF0NWVNfxTwmkyAU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/JavaserverFaces/~4/U5Oxjin-NLo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jsf-tr.blogspot.com/feeds/3763189588458290447/comments/default" title="Kayıt Yorumları" /><link rel="replies" type="text/html" href="http://jsf-tr.blogspot.com/2010/03/myfaces-12-kurulumu-xhtml.html#comment-form" title="0 Yorum" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2509844667593749835/posts/default/3763189588458290447?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2509844667593749835/posts/default/3763189588458290447?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JavaserverFaces/~3/U5Oxjin-NLo/myfaces-12-kurulumu-xhtml.html" title="myFaces 1.2 kurulumu - xhtml" /><author><name>ibrahim demir</name><uri>http://www.blogger.com/profile/14063980678411736699</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="23" src="http://4.bp.blogspot.com/_ELhi79hYqkg/S1mqZHoY-NI/AAAAAAAAAFA/RV2hY7WhL7U/S220/id.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://jsf-tr.blogspot.com/2010/03/myfaces-12-kurulumu-xhtml.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C04BRXYyfCp7ImA9WxBaE0g.&quot;"><id>tag:blogger.com,1999:blog-2509844667593749835.post-41633449795173026</id><published>2010-03-05T21:23:00.005+02:00</published><updated>2010-03-23T15:45:54.894+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-23T15:45:54.894+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Kurulum" /><category scheme="http://www.blogger.com/atom/ns#" term="myfaces" /><title>myFaces 1.2 kurulumu - jsp</title><content type="html">Bugün majorra 1.2 gibi bir jsf implementasyonu olan Myfaces 1.2'nin kurulumunu anlatacağım.&lt;br /&gt;
&lt;br /&gt;
Eclipse'te "mydemo1" isimli dynamic web project oluşturalım. &lt;br /&gt;
Myfaces'in &lt;a href="http://myfaces.apache.org/download.html"&gt;download&lt;/a&gt; sayfasından Myfaces 1.2.X versiyonlu zip dosyasının indirin. Dosyası açıtından sonra lib klasörü içerisindeki jar dosyalarını WEB-INF\lib klasörüne kopyalayın. İlk örneğimizi jsp sayfası şeklinde yapacağımız için jstl.jar dosyasını da WEB-INF\lib klasörüne eklemek gerekiyor. jar dosylarının tam listesi aşağıdadır.&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;commons-beanutils-1.7.0.jar&lt;/li&gt;
&lt;li&gt;commons-codec-1.3.jar&lt;/li&gt;
&lt;li&gt;commons-collections-3.2.jar&lt;/li&gt;
&lt;li&gt;commons-digester-1.8.jar&lt;/li&gt;
&lt;li&gt;commons-discovery-0.4.jar&lt;/li&gt;
&lt;li&gt;commons-logging-1.1.1.jar&lt;/li&gt;
&lt;li&gt;jstl.jar&lt;/li&gt;
&lt;li&gt;myfaces-api-1.2.8.jar&lt;/li&gt;
&lt;li&gt;myfaces-impl-1.2.8.jar&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
web.xml &lt;br /&gt;
&lt;pre class="brush: xml"&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;
&amp;lt;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_2_5.xsd"
 id="WebApp_ID" version="2.5"&amp;gt;
 &amp;lt;display-name&amp;gt;mydemo&amp;lt;/display-name&amp;gt;


 &amp;lt;!-- Faces Servlet --&amp;gt;
 &amp;lt;servlet&amp;gt;
  &amp;lt;servlet-name&amp;gt;Faces Servlet&amp;lt;/servlet-name&amp;gt;
  &amp;lt;servlet-class&amp;gt;javax.faces.webapp.FacesServlet&amp;lt;/servlet-class&amp;gt;
  &amp;lt;load-on-startup&amp;gt;1&amp;lt;/load-on-startup&amp;gt;
 &amp;lt;/servlet&amp;gt;


 &amp;lt;!-- Faces Servlet Mapping --&amp;gt;
 &amp;lt;servlet-mapping&amp;gt;
  &amp;lt;servlet-name&amp;gt;Faces Servlet&amp;lt;/servlet-name&amp;gt;
  &amp;lt;url-pattern&amp;gt;*.jsf&amp;lt;/url-pattern&amp;gt;
 &amp;lt;/servlet-mapping&amp;gt;


 &amp;lt;welcome-file-list&amp;gt;
  &amp;lt;welcome-file&amp;gt;index.html&amp;lt;/welcome-file&amp;gt;
 &amp;lt;/welcome-file-list&amp;gt;
&amp;lt;/web-app&amp;gt;
&lt;/pre&gt;&lt;br /&gt;
firstPage.jsp&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: xml;"&gt;&amp;lt;%@ page language="java" contentType="text/html; charset=UTF-8"
 pageEncoding="UTF-8"%&amp;gt;
&amp;lt;%@ taglib prefix="f" uri="http://java.sun.com/jsf/core"%&amp;gt;
&amp;lt;%@ taglib prefix="h" uri="http://java.sun.com/jsf/html"%&amp;gt;
&amp;lt;!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"&amp;gt;
&amp;lt;html&amp;gt;
&amp;lt;head&amp;gt;
&amp;lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8"&amp;gt;
&amp;lt;title&amp;gt;Insert title here&amp;lt;/title&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
&amp;lt;f:view&amp;gt;
   İlk web sayfamız...
&amp;lt;/f:view&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2509844667593749835-41633449795173026?l=jsf-tr.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/9Zeqt-M1KVroiMmid2kYlB0dfdA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/9Zeqt-M1KVroiMmid2kYlB0dfdA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/9Zeqt-M1KVroiMmid2kYlB0dfdA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/9Zeqt-M1KVroiMmid2kYlB0dfdA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/JavaserverFaces/~4/6R_bLiE-RAw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jsf-tr.blogspot.com/feeds/41633449795173026/comments/default" title="Kayıt Yorumları" /><link rel="replies" type="text/html" href="http://jsf-tr.blogspot.com/2010/03/myfaces-12-kurulumu-jsp.html#comment-form" title="1 Yorum" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2509844667593749835/posts/default/41633449795173026?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2509844667593749835/posts/default/41633449795173026?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JavaserverFaces/~3/6R_bLiE-RAw/myfaces-12-kurulumu-jsp.html" title="myFaces 1.2 kurulumu - jsp" /><author><name>ibrahim demir</name><uri>http://www.blogger.com/profile/14063980678411736699</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="23" src="http://4.bp.blogspot.com/_ELhi79hYqkg/S1mqZHoY-NI/AAAAAAAAAFA/RV2hY7WhL7U/S220/id.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://jsf-tr.blogspot.com/2010/03/myfaces-12-kurulumu-jsp.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEAAQHs4fip7ImA9WxBUEEU.&quot;"><id>tag:blogger.com,1999:blog-2509844667593749835.post-309276281859025969</id><published>2010-02-21T19:12:00.002+02:00</published><updated>2010-02-25T09:25:41.536+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-25T09:25:41.536+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="JSF" /><category scheme="http://www.blogger.com/atom/ns#" term="primefaces" /><title>jsf primefaces entegrasyonu</title><content type="html">jsf ile primefaces entegrasyonu için aşağıdaki linkleri kullanabilirsiniz&lt;br /&gt;
&lt;br /&gt;
jsf 1.2 ve jsp projesi için &lt;a href="http://primefaces.blogspot.com/2010/02/primefaces-ortamnn-kurulmas-jsf-12-jsp.html"&gt;bu yazıyı&lt;/a&gt;&lt;br /&gt;
jsf 1.2 ve facelet projesi için &lt;a href="http://primefaces.blogspot.com/2010/02/bu-sayfadaki-yonergelere-uygun-olarak.html"&gt;bu yazıyı&lt;/a&gt;&lt;br /&gt;
jsf 2.0 projesi için &lt;a href="http://primefaces.blogspot.com/2010/02/primefaces-ortamnn-kurulmas-jsf-20.html"&gt;bu yazıyı&lt;/a&gt;&lt;br /&gt;
okuyabilirsiniz.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2509844667593749835-309276281859025969?l=jsf-tr.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/AdUyDaBVn_CcPLuA3PNi_y9X81A/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/AdUyDaBVn_CcPLuA3PNi_y9X81A/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/AdUyDaBVn_CcPLuA3PNi_y9X81A/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/AdUyDaBVn_CcPLuA3PNi_y9X81A/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/JavaserverFaces/~4/Ds_50_3J4lA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jsf-tr.blogspot.com/feeds/309276281859025969/comments/default" title="Kayıt Yorumları" /><link rel="replies" type="text/html" href="http://jsf-tr.blogspot.com/2010/02/jsf-primefaces-entegrasyonu.html#comment-form" title="0 Yorum" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2509844667593749835/posts/default/309276281859025969?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2509844667593749835/posts/default/309276281859025969?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JavaserverFaces/~3/Ds_50_3J4lA/jsf-primefaces-entegrasyonu.html" title="jsf primefaces entegrasyonu" /><author><name>ibrahim demir</name><uri>http://www.blogger.com/profile/14063980678411736699</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="23" src="http://4.bp.blogspot.com/_ELhi79hYqkg/S1mqZHoY-NI/AAAAAAAAAFA/RV2hY7WhL7U/S220/id.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://jsf-tr.blogspot.com/2010/02/jsf-primefaces-entegrasyonu.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkIGQn8-eip7ImA9WxBWF04.&quot;"><id>tag:blogger.com,1999:blog-2509844667593749835.post-6892570202481295669</id><published>2010-02-08T21:56:00.001+02:00</published><updated>2010-02-09T18:55:23.152+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-09T18:55:23.152+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="jsf 2" /><category scheme="http://www.blogger.com/atom/ns#" term="Yönlendirme" /><title>jsf 2 sayfa yönlendirme ve Redirect</title><content type="html">jsf 1.2 &lt;a href="http://jsf-tr.blogspot.com/2009/11/jsf-sayfa-yonlendirme.html"&gt;yönlendirme&lt;/a&gt; işlemini faces-config.xml ile yapıyorduk.Jsf 2.0'da diğer xml ayarlarından kurtulduğumuz gibi yönlendirmede de xml'e birşey yazmaktan kurtulduk. jsf'de iki türlü yönlendirme yapabiliriz. &lt;br /&gt;
1. Bir web sayfasından diğer web sayfasına doğrudan yönlendirme :&lt;br /&gt;
&lt;b&gt;&amp;lt;h:commandButton action="targetPage" value="Git" /&amp;gt;&lt;/b&gt;&lt;br /&gt;
2. Managed Bean'den yönlendirme :&lt;br /&gt;
&lt;pre class="brush: java;"&gt;public String goTargetPage() {
    return "targetPage";
}
&lt;/pre&gt;&lt;br /&gt;
Yönlendirme yaparaken action 1. durumda action'a yazdığımızı 2. durumda ise return ile döndürdüğüm sayfa adının .xhtml uzantılı dosyasını bulup onu görütüler. Ayrıca isterseniz dosyanın .xhtml'li adını yada .jsf'li adını yazsanızda yine aynı şekilde yönendirme çalışacaktı. Aşağıdaki 3 buton aynı işi yapacaktır.&lt;br /&gt;
&lt;b&gt;&amp;lt;h:commandButton action="targetPage" value="Git" /&amp;gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&amp;lt;h:commandButton action="targetPage.xhtml" value="Git" /&amp;gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&amp;lt;h:commandButton action="targetPage.jsf" value="Git" /&amp;gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Bu şekilde normal yönlendirme yapıyoruz. Bunu dışında bir de redirect özelliğimiz var. jsf 1.2'de faces-config'e &amp;lt;redirect/&amp;gt; tagını ekleyerek yapabiliyorduk. jsf 2'de ise sayfaya faces-redirect=true parametresi geçerek yapabiliyoruz. Örneğin&lt;br /&gt;
&lt;b&gt;&amp;lt;h:commandButton action="targetPage.xhtml?faces-redirect=true" value="Git" /&amp;gt;&lt;/b&gt;&lt;br /&gt;
yada bean üzerinden&lt;br /&gt;
&lt;pre class="brush: java;"&gt;public String goTargetPage() {
    return "targetPage.xhtml?faces-redirect=true";
}
&lt;/pre&gt;şekilinde yönlendirme yapabilir. Aşağıdaki örnekte tüm durumlar için yönlendirme yapan bir örneğimiz var. Ayrıca bean'de duruma göre farklı sayfalara yönlendirmeyi sağlayan bir methodda var.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;source.xhtml&lt;/b&gt;&lt;br /&gt;
&lt;pre class="brush: xml;"&gt;&amp;lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&amp;gt;
&amp;lt;html xmlns="http://www.w3.org/1999/xhtml"
 xmlns:h="http://java.sun.com/jsf/html"
 xmlns:f="http://java.sun.com/jsf/core"
 xmlns:ui="http://java.sun.com/jsf/facelets"&amp;gt;

&amp;lt;h:head&amp;gt;
 &amp;lt;title&amp;gt;JSF 2.0 - Navigation&amp;lt;/title&amp;gt;
 &amp;lt;style type="text/css"&amp;gt;
input {
 width: 250px;
}
&amp;lt;/style&amp;gt;
&amp;lt;/h:head&amp;gt;
&amp;lt;h:body&amp;gt;
 &amp;lt;h:form&amp;gt;

  &amp;lt;h:panelGrid columns="2" border="1"&amp;gt;
   &amp;lt;f:facet name="header"&amp;gt;Sayfandan Yönlendirme&amp;lt;/f:facet&amp;gt;
   &amp;lt;h:outputText value="Normal" /&amp;gt;
   &amp;lt;h:outputText value="Redirect" /&amp;gt;
   &amp;lt;h:commandButton action="target1" value="Birinci Sayfa" /&amp;gt;
   &amp;lt;h:commandButton action="target1?faces-redirect=true"
    value=" Birinci Sayfa - Redirect" /&amp;gt;
   &amp;lt;h:commandButton action="target1.xhtml" value="Birinci Sayfa - xhtml" /&amp;gt;
   &amp;lt;h:commandButton action="target1.xhtml?faces-redirect=true"
    value="Birinci Sayfa -  Redirect - xhtml" /&amp;gt;
   &amp;lt;h:commandButton action="target1.jsf" value="Birinci Sayfa - jsf" /&amp;gt;
   &amp;lt;h:commandButton action="target1.jsf?faces-redirect=true"
    value="Birinci Sayfa -  Redirect - jsf" /&amp;gt;
  &amp;lt;/h:panelGrid&amp;gt;
  &amp;lt;br /&amp;gt;
  &amp;lt;h:panelGrid columns="2" border="1"&amp;gt;
   &amp;lt;f:facet name="header"&amp;gt;Managed Bean'den yönlendirme&amp;lt;/f:facet&amp;gt;
   &amp;lt;h:outputText value="Normal" /&amp;gt;
   &amp;lt;h:outputText value="Redirect" /&amp;gt;
   &amp;lt;h:commandButton action="#{navigationBean.goTarget1}"
    value="Birinci Sayfa" /&amp;gt;
   &amp;lt;h:commandButton action="#{navigationBean.goTarget1_Redirect}"
    value="Birinci Sayfa - Redirect" /&amp;gt;
   &amp;lt;h:commandButton action="#{navigationBean.goTarget1_xhtml}"
    value="Birinci Sayfa - xhtml" /&amp;gt;
   &amp;lt;h:commandButton action="#{navigationBean.goTarget1_xhtml_Redirect}"
    value="Birinci Sayfa -  xhtml - Redirect" /&amp;gt;
   &amp;lt;h:commandButton action="#{navigationBean.goTarget1_jsf}"
    value="Birinci Sayfa - jsf" /&amp;gt;
   &amp;lt;h:commandButton action="#{navigationBean.goTarget1_jsf_Redirect}"
    value="Birinci Sayfa - jsf - Redirect" /&amp;gt;

  &amp;lt;/h:panelGrid&amp;gt;

  &amp;lt;br /&amp;gt;
  &amp;lt;h:panelGrid columns="2" border="1"&amp;gt;
   &amp;lt;f:facet name="header"&amp;gt;Managed Bean'den koşullu yönlendirme&amp;lt;/f:facet&amp;gt;
   &amp;lt;h:outputText value="Normal" /&amp;gt;
   &amp;lt;h:outputText value="Redirect" /&amp;gt;
   &amp;lt;h:commandButton action="#{navigationBean.goPage}"
    value="Sayfaya git" /&amp;gt;
   &amp;lt;h:commandButton action="#{navigationBean.goPage_Redirect}"
    value="Sayfaya Git - Redirect" /&amp;gt;
   &amp;lt;h:commandButton action="#{navigationBean.goPage_xhtml}"
    value="Sayfaya git - xhtml " /&amp;gt;
   &amp;lt;h:commandButton action="#{navigationBean.goPage_xhtml_Redirect}"
    value="Sayfaya Git - xhtml -Redirect" /&amp;gt;
   &amp;lt;h:commandButton action="#{navigationBean.goPage_jsf}"
    value="Sayfaya git - jsf" /&amp;gt;
   &amp;lt;h:commandButton action="#{navigationBean.goPage_jsf_Redirect}"
    value="Sayfaya Git - jsf - Redirect" /&amp;gt;

  &amp;lt;/h:panelGrid&amp;gt;

 &amp;lt;/h:form&amp;gt;
&amp;lt;/h:body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/pre&gt;&lt;b&gt;target1.xhtml&lt;/b&gt;&lt;br /&gt;
&lt;pre class="brush: xml;"&gt;&amp;lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&amp;gt;
&amp;lt;html xmlns="http://www.w3.org/1999/xhtml"
 xmlns:h="http://java.sun.com/jsf/html"
 xmlns:f="http://java.sun.com/jsf/core"
 xmlns:ui="http://java.sun.com/jsf/facelets"&amp;gt;

&amp;lt;h:head&amp;gt;
 &amp;lt;title&amp;gt;JSF 2.0 - Navigation&amp;lt;/title&amp;gt;
&amp;lt;/h:head&amp;gt;
&amp;lt;h:body&amp;gt;
 Hedef sayfa 1
&amp;lt;/h:body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/pre&gt;&lt;b&gt;target2.xhtml&lt;/b&gt;&lt;br /&gt;
&lt;pre class="brush: xml;"&gt;&amp;lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&amp;gt;
&amp;lt;html xmlns="http://www.w3.org/1999/xhtml"
 xmlns:h="http://java.sun.com/jsf/html"
 xmlns:f="http://java.sun.com/jsf/core"
 xmlns:ui="http://java.sun.com/jsf/facelets"&amp;gt;

&amp;lt;h:head&amp;gt;
 &amp;lt;title&amp;gt;JSF 2.0 - Navigation&amp;lt;/title&amp;gt;
&amp;lt;/h:head&amp;gt;
&amp;lt;h:body&amp;gt;
 Hedef sayfa 2
&amp;lt;/h:body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/pre&gt;&lt;b&gt;NavigationBean.java&lt;/b&gt;&lt;br /&gt;
&lt;pre class="brush: java;"&gt;import java.util.Random;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;

@ManagedBean(name = "navigationBean")
@RequestScoped
public class NavigationBean {
 private int getPageNumber() {
  // rastgele bir sayfa numarası üretir 0 yada 1 döndürür
  Random random = new Random();
  return random.nextInt(2);
 }

 public String goTarget1() {
  return "target1";
 }

 public String goTarget1_Redirect() {
  return "target1?faces-redirect=true";
 }

 public String goTarget1_xhtml() {
  return "target1.xhtml";
 }

 public String goTarget1_xhtml_Redirect() {
  return "target1.xhtmlfaces-redirect=true";
 }

 public String goTarget1_jsf() {
  return "target1.jsf";
 }

 public String goTarget1_jsf_Redirect() {
  return "target1.jsf?faces-redirect=true";
 }

 public String goPage() {
  if (getPageNumber() == 0)
   return "target1";
  else
   return "target2";
 }

 public String goPage_Redirect() {
  if (getPageNumber() == 0)
   return "target1?faces-redirect=true";
  else
   return "target2?faces-redirect=true";
 }

 public String goPage_xhtml() {
  if (getPageNumber() == 0)
   return "target1.xhtml";
  else
   return "target2.xhtml";
 }

 public String goPage_xhtml_Redirect() {
  if (getPageNumber() == 0)
   return "target1.xhtml?faces-redirect=true";
  else
   return "target2.xhtml?faces-redirect=true";
 }

 public String goPage_jsf() {
  if (getPageNumber() == 0)
   return "target1.jsf";
  else
   return "target2.jsf";
 }

 public String goPage_jsf_Redirect() {
  if (getPageNumber() == 0)
   return "target1.jsf?faces-redirect=true";
  else
   return "target2.jsf?faces-redirect=true";
 }
}
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2509844667593749835-6892570202481295669?l=jsf-tr.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/pggi__86NMsfptCc-tchE2BK9aI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/pggi__86NMsfptCc-tchE2BK9aI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/pggi__86NMsfptCc-tchE2BK9aI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/pggi__86NMsfptCc-tchE2BK9aI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/JavaserverFaces/~4/yuhVUMbRZL8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jsf-tr.blogspot.com/feeds/6892570202481295669/comments/default" title="Kayıt Yorumları" /><link rel="replies" type="text/html" href="http://jsf-tr.blogspot.com/2010/02/jsf-2-sayfa-yonlendirme-ve-redirect.html#comment-form" title="5 Yorum" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2509844667593749835/posts/default/6892570202481295669?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2509844667593749835/posts/default/6892570202481295669?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JavaserverFaces/~3/yuhVUMbRZL8/jsf-2-sayfa-yonlendirme-ve-redirect.html" title="jsf 2 sayfa yönlendirme ve Redirect" /><author><name>ibrahim demir</name><uri>http://www.blogger.com/profile/14063980678411736699</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="23" src="http://4.bp.blogspot.com/_ELhi79hYqkg/S1mqZHoY-NI/AAAAAAAAAFA/RV2hY7WhL7U/S220/id.jpg" /></author><thr:total>5</thr:total><feedburner:origLink>http://jsf-tr.blogspot.com/2010/02/jsf-2-sayfa-yonlendirme-ve-redirect.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkMHQn04cSp7ImA9WxBWF0w.&quot;"><id>tag:blogger.com,1999:blog-2509844667593749835.post-2337076771290500703</id><published>2010-02-07T18:06:00.002+02:00</published><updated>2010-02-09T13:20:33.339+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-09T13:20:33.339+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="validator" /><category scheme="http://www.blogger.com/atom/ns#" term="jsf 2" /><category scheme="http://www.blogger.com/atom/ns#" term="converter" /><title>jsf 2 ile custom converter ve custom validator</title><content type="html">&lt;a href="http://jsf-tr.blogspot.com/2010/01/ozel-dogrulama-custom-validator.html"&gt;jsf 1.2'de özel doğrulama işlemleri&lt;/a&gt; için validator yazardık ve bu validator'leri faces-config.xml'de tanımlardık. Jsf 2'de validator'ın yazım şeklinde çok az değişiklik oldu. Sadece faces-config.xml'e yazdığımı değerleri validtor'ın içine yazıyoruz.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;EmailValidator&lt;/b&gt;&lt;br /&gt;
&lt;pre class="brush: java;"&gt;import javax.faces.application.FacesMessage;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.validator.FacesValidator;
import javax.faces.validator.Validator;
import javax.faces.validator.ValidatorException;

@FacesValidator("emailValidator")
public class EmailValidator implements Validator {

 public void validate(FacesContext facesContext, UIComponent uiComponent,
   Object value) throws ValidatorException {
  String email = (String) value;
  if (email.indexOf("@") &lt;= 0) {
   FacesMessage message = new FacesMessage();
   message.setSummary("invalid email");
   throw new ValidatorException(message);
  }
 }
}
&lt;/pre&gt;
Sizinde görebileceğiniz gibi xml'deki tanım yerine &lt;b&gt;@FacesValidator("emailValidator")&lt;/b&gt; şeklinde bir tanımlama geldi ki anlamı, bu bir validator'dır ve id'si &lt;b&gt;emailValidator&lt;/b&gt;'dır. Tıpkı jsf 1.2'de olduğu gibi kullanılıyor. 


&lt;b&gt;TestValidator.java&lt;/b&gt;
&lt;pre class="brush: java;"&gt;import java.io.Serializable;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;

@ManagedBean(name = "testValidator")
@RequestScoped
public class TestValidator implements Serializable {
 private String email;

 public String getEmail() {
  return email;
 }

 public void setEmail(String email) {
  this.email = email;
 }

 public void save() {
  System.out.println("Email saved");
 }
}
&lt;/pre&gt;&lt;b&gt;testValidator.xhtml&lt;/b&gt;
&lt;pre class="brush: xml;"&gt;&amp;lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&amp;gt;
&amp;lt;html xmlns="http://www.w3.org/1999/xhtml"
 xmlns:h="http://java.sun.com/jsf/html"
 xmlns:f="http://java.sun.com/jsf/core"
 xmlns:ui="http://java.sun.com/jsf/facelets"&amp;gt;

&amp;lt;h:head&amp;gt;
 &amp;lt;title&amp;gt;JSF 2.0 - Custom Validator&amp;lt;/title&amp;gt;
&amp;lt;/h:head&amp;gt;
&amp;lt;h:body&amp;gt;
 &amp;lt;h:messages style="color:red" /&amp;gt;
 &amp;lt;br /&amp;gt;
 &amp;lt;h:form&amp;gt;
  &amp;lt;h:outputText value="Email :" /&amp;gt;
  &amp;lt;h:inputText value="#{testValidator.email}"&amp;gt;
   &amp;lt;f:validator validatorId="emailValidator" /&amp;gt;
  &amp;lt;/h:inputText&amp;gt;
  &amp;lt;h:commandButton action="#{testValidator.save}" value="Kaydet" /&amp;gt;
 &amp;lt;/h:form&amp;gt;
&amp;lt;/h:body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/pre&gt;Özel dönüştürücüler için ise daha önce jsf 1.2'de anlattığımız &lt;a href="http://jsf-tr.blogspot.com/2010/01/ozel-donusturucu-custom-converter.html"&gt;Deparatman dönüştürücüyü&lt;/a&gt; yeniden yazalım.

&lt;b&gt;Department.java&lt;/b&gt;
&lt;pre class="brush: java;"&gt;public class Department {
 private Integer id;
 private String code;
 private String name;

 public Department() {
 }

 public Department(Integer id, String code, String name) {
  this.id = id;
  this.code = code;
  this.name = name;
 }

 public Integer getId() {
  return id;
 }

 public void setId(Integer id) {
  this.id = id;
 }

 public String getCode() {
  return code;
 }

 public void setCode(String code) {
  this.code = code;
 }

 public String getName() {
  return name;
 }

 public void setName(String name) {
  this.name = name;
 }

 @Override
 public boolean equals(Object obj) {
  if (obj == null)
   return false;
  if (obj instanceof Department) {
   Department other = (Department) obj;
   if (other.getId() == this.id &amp;&amp; other.getCode().equals(this.code)
     &amp;&amp; other.getName().equals(this.name))
    return true;
  }
  return false;
 }

}
&lt;/pre&gt;&lt;b&gt;DepartmentList.java&lt;/b&gt;
&lt;pre class="brush: java;"&gt;import java.util.ArrayList;
import java.util.List;

public class DepartmentList {

 private List&amp;lt;Department&amp;gt; departments;

 public DepartmentList() {
  departments = new ArrayList&amp;lt;Department&amp;gt;();
  departments.add(new Department(1, "ISD", "Bilgi Sistemleri"));
  departments.add(new Department(2, "FIN", "Finans"));
  departments.add(new Department(3, "HR", "İnsan Kaynakları"));
  departments.add(new Department(4, "SALES", "Satış / Pazarlama"));
 }

 public List&amp;lt;Department&amp;gt; getDepartments() {
  return departments;
 }

 public void setDepartments(List&amp;lt;Department&amp;gt; departments) {
  this.departments = departments;
 }
}
&lt;/pre&gt;&lt;b&gt;TestConverter.java&lt;/b&gt;
&lt;pre class="brush: java;"&gt;import java.util.ArrayList;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.model.SelectItem;

@ManagedBean(name = "testConverter")
@RequestScoped
public class TestConverter {
 private Department department;
 private List&amp;lt;SelectItem&amp;gt; selectItems = new ArrayList&amp;lt;SelectItem&amp;gt;();

 public TestConverter() {
  List&amp;lt;Department&amp;gt; departmentList = new DepartmentList().getDepartments();
  for (Department department : departmentList) {
   selectItems.add(new SelectItem(department, department.getName()));
  }
 }

 public Department getDepartment() {
  return department;
 }

 public void setDepartment(Department department) {
  this.department = department;
 }

 public List&amp;lt;SelectItem&amp;gt; getSelectItems() {
  return selectItems;
 }

 public void setSelectItems(List&amp;lt;SelectItem&amp;gt; selectItems) {
  this.selectItems = selectItems;
 }

 public void save() {
  System.out.println("Selected Department Id :" + department.getId());
  System.out.println("Selected Department Code :" + department.getCode());
  System.out.println("Selected Department Name :" + department.getName());
 }
}
&lt;/pre&gt;&lt;b&gt;testConverter.xhtml&lt;/b&gt;
&lt;pre class="brush: xml;"&gt;&amp;lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&amp;gt;
&amp;lt;html xmlns="http://www.w3.org/1999/xhtml"
 xmlns:h="http://java.sun.com/jsf/html"
 xmlns:f="http://java.sun.com/jsf/core"
 xmlns:ui="http://java.sun.com/jsf/facelets"&amp;gt;

&amp;lt;h:head&amp;gt;
 &amp;lt;title&amp;gt;JSF 2.0 - Custom Converter&amp;lt;/title&amp;gt;
&amp;lt;/h:head&amp;gt;
&amp;lt;h:body&amp;gt;
 &amp;lt;h:form prependId="false"&amp;gt;
  &amp;lt;h:messages /&amp;gt;
  &amp;lt;br /&amp;gt;
  &amp;lt;h:selectOneMenu id="departmentSelect"
   value="#{testConverter.department}"&amp;gt;
   &amp;lt;f:selectItems value="#{testConverter.selectItems}" /&amp;gt;
   &amp;lt;f:converter converterId="departmentConverter" /&amp;gt;
  &amp;lt;/h:selectOneMenu&amp;gt;
  &amp;lt;h:commandButton action="#{testConverter.save}" value="Kaydet" /&amp;gt;
 &amp;lt;/h:form&amp;gt;

&amp;lt;/h:body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/pre&gt;Örneğin çalışması için departmentConverter adında bi dönüştürüye ihtiyaç var. jsf 1.2'de dönüştürücüyü yazıp faces-config.xml'e ekliyorduk. jsf 2'de ise :

&lt;b&gt;DepartmentConverter.java&lt;/b&gt;
&lt;pre class="brush: java;"&gt;import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.FacesConverter;

@FacesConverter("departmentConverter")
public class DepartmentConverter implements Converter {

 @Override
 public Object getAsObject(FacesContext context, UIComponent component,
   String str) {
  String values[] = str.split(":");
  Department department = new Department();
  if (values.length == 3) {
   department.setId(Integer.parseInt(values[0]));
   department.setCode(values[1]);
   department.setName(values[2]);
   return department;
  }
  return department;
 }

 @Override
 public String getAsString(FacesContext context, UIComponent component,
   Object object) {
  Department department = (Department) object;
  String str = "";
  if (department != null) {
   str = String.valueOf(department.getId()) + ":"
     + department.getCode() + ":" + department.getName();
  }
  return str;
 }
}
&lt;/pre&gt;&lt;b&gt;@FacesConverter("departmentConverter")&lt;/b&gt; Class'ın başına yazılan bu terim ile bu sınıfın bir dönüştürcü olduğunu ve id'sinin &lt;b&gt;departmentConverter&lt;/b&gt; olduğunu söyledik.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2509844667593749835-2337076771290500703?l=jsf-tr.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/YAYLmLe7309C3odFaLFVZQxYyN4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/YAYLmLe7309C3odFaLFVZQxYyN4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/YAYLmLe7309C3odFaLFVZQxYyN4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/YAYLmLe7309C3odFaLFVZQxYyN4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/JavaserverFaces/~4/BjY04PQZAkw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jsf-tr.blogspot.com/feeds/2337076771290500703/comments/default" title="Kayıt Yorumları" /><link rel="replies" type="text/html" href="http://jsf-tr.blogspot.com/2010/02/jsf-2-ile-custom-converter-ve-custom.html#comment-form" title="0 Yorum" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2509844667593749835/posts/default/2337076771290500703?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2509844667593749835/posts/default/2337076771290500703?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JavaserverFaces/~3/BjY04PQZAkw/jsf-2-ile-custom-converter-ve-custom.html" title="jsf 2 ile custom converter ve custom validator" /><author><name>ibrahim demir</name><uri>http://www.blogger.com/profile/14063980678411736699</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="23" src="http://4.bp.blogspot.com/_ELhi79hYqkg/S1mqZHoY-NI/AAAAAAAAAFA/RV2hY7WhL7U/S220/id.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://jsf-tr.blogspot.com/2010/02/jsf-2-ile-custom-converter-ve-custom.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0IESHoyfip7ImA9WxBWFk8.&quot;"><id>tag:blogger.com,1999:blog-2509844667593749835.post-9181591743051551120</id><published>2010-02-07T11:02:00.033+02:00</published><updated>2010-02-08T11:31:49.496+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-08T11:31:49.496+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="jsf 2" /><category scheme="http://www.blogger.com/atom/ns#" term="Managed Bean" /><title>jsf 2 view scope</title><content type="html">jsf 1.2'de &lt;a href="http://jsf-tr.blogspot.com/2009/11/jsf-bilesenleri-ile-javay-konusturmak_22.html"&gt;3 adet scope&lt;/a&gt; var. jsf 2.0 ile view scope adında yeni bir scope daha geldi. view scope, request ile session arasında bir noktadadır. Requsest scope'ta aynı sayfa gösterilirken eğer saklamıyorsanınız bazı değerleri kaybedebiliyordunuz. Örneğin bir kaydı değiştirmek için ekranda gösterdiğinizde eğer id alanını inputhidden'da saklamazsanız kayboluyordu. Değişkenleri sessionda saklamakta çok mantıklı değildi. İşte bu sorunu çözmek için aynı sayfada kaldığın sürece yaşayan yeni bir scope geldi. Şimdi sayfa bir butona basınca bean'deki değeri artıran bir örnek yazalım ve hem request scope'ta hem de view scope'ta aynı örneği çalıştırarak nelere olduğunu izleyelim.  Önce request bean;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;CountRequestBean.java&lt;/b&gt;&lt;br /&gt;
&lt;pre class="brush: java;"&gt;import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;

@ManagedBean(name = "countRequestBean")
@RequestScoped
public class CountRequestBean {
 private int counter;

 public void add() {
  counter++;
  System.out.println("Counter : " + counter);
 }
}
&lt;/pre&gt;&lt;br /&gt;
&lt;b&gt;countRequest.xhtml&lt;/b&gt;&lt;br /&gt;
&lt;pre class="brush: xml;"&gt;&amp;lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&amp;gt;
&amp;lt;html xmlns="http://www.w3.org/1999/xhtml"
 xmlns:h="http://java.sun.com/jsf/html"
 xmlns:f="http://java.sun.com/jsf/core"
 xmlns:ui="http://java.sun.com/jsf/facelets"&amp;gt;

&amp;lt;h:head&amp;gt;
 &amp;lt;title&amp;gt;JSF 2.0 - Count Sample&amp;lt;/title&amp;gt;
&amp;lt;/h:head&amp;gt;
&amp;lt;h:body&amp;gt;
 &amp;lt;h:form&amp;gt;
  &amp;lt;h:commandButton action="#{countRequestBean.add}" value="Say" /&amp;gt;
 &amp;lt;/h:form&amp;gt;
&amp;lt;/h:body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/pre&gt;Bu sayfayı çalıştırıp butonu bir kaç kez tıkladığımızda çıktı aşağıdaki gibi olacaktır.&lt;br /&gt;
&lt;span style="color:red"&gt;&lt;br /&gt;
Counter : 1&lt;br /&gt;
Counter : 1&lt;br /&gt;
Counter : 1&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Şimdi view bean'de deneyelim&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;CountViewBean.java&lt;/b&gt;&lt;br /&gt;
&lt;pre class="brush: java;"&gt;import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

@ManagedBean(name = "countViewBean")
@ViewScoped
public class CountViewBean {
 private int counter = 0;

 public void add() {
  counter++;
  System.out.println("Counter : " + counter);
 }
}
&lt;/pre&gt;&lt;b&gt;countView.xhtml&lt;/b&gt;&lt;br /&gt;
&lt;pre class="brush: xml;"&gt;&amp;lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&amp;gt;
&amp;lt;html xmlns="http://www.w3.org/1999/xhtml"
 xmlns:h="http://java.sun.com/jsf/html"
 xmlns:f="http://java.sun.com/jsf/core"
 xmlns:ui="http://java.sun.com/jsf/facelets"&amp;gt;

&amp;lt;h:head&amp;gt;
 &amp;lt;title&amp;gt;JSF 2.0 - Count Sample&amp;lt;/title&amp;gt;
&amp;lt;/h:head&amp;gt;
&amp;lt;h:body&amp;gt;
 &amp;lt;h:form&amp;gt;
  &amp;lt;h:commandButton action="#{countViewBean.add}" value="Say" /&amp;gt;
 &amp;lt;/h:form&amp;gt;
&amp;lt;/h:body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/pre&gt;Bu sayfayı çalıştırıp butonu bir kaç kez tıkladığımızda çıktı aşağıdaki gibi olacaktır.&lt;br /&gt;
&lt;span style="color:red"&gt;&lt;br /&gt;
Counter : 1&lt;br /&gt;
Counter : 2&lt;br /&gt;
Counter : 3&lt;br /&gt;
Counter : 4&lt;br /&gt;
Counter : 5&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Gördüğünüz gibi sayfa değişmediği sürece view scope değerleri saklıyor.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2509844667593749835-9181591743051551120?l=jsf-tr.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Kyu2LnUyeVYUKZ5J-wAULHkx9Gs/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Kyu2LnUyeVYUKZ5J-wAULHkx9Gs/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Kyu2LnUyeVYUKZ5J-wAULHkx9Gs/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Kyu2LnUyeVYUKZ5J-wAULHkx9Gs/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/JavaserverFaces/~4/TSIyIAGoJIU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jsf-tr.blogspot.com/feeds/9181591743051551120/comments/default" title="Kayıt Yorumları" /><link rel="replies" type="text/html" href="http://jsf-tr.blogspot.com/2010/02/jsf-20-view-scope.html#comment-form" title="2 Yorum" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2509844667593749835/posts/default/9181591743051551120?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2509844667593749835/posts/default/9181591743051551120?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JavaserverFaces/~3/TSIyIAGoJIU/jsf-20-view-scope.html" title="jsf 2 view scope" /><author><name>ibrahim demir</name><uri>http://www.blogger.com/profile/14063980678411736699</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="23" src="http://4.bp.blogspot.com/_ELhi79hYqkg/S1mqZHoY-NI/AAAAAAAAAFA/RV2hY7WhL7U/S220/id.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://jsf-tr.blogspot.com/2010/02/jsf-20-view-scope.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0UGRnw9fyp7ImA9WxBWF08.&quot;"><id>tag:blogger.com,1999:blog-2509844667593749835.post-3413744147466076411</id><published>2010-02-06T14:04:00.001+02:00</published><updated>2010-02-09T15:13:47.267+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-09T15:13:47.267+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="jsf 2" /><category scheme="http://www.blogger.com/atom/ns#" term="Managed Bean" /><title>jsf 2 ile managed bean ve scope kullanımı</title><content type="html">Jsf 1.2'de Managed Bean kullanmak için faces-config.xml dosyasında tanımlama yapıyorduk. jsf 2.0 ile bu tanımlama ortadan kalktı. Bunun yerine annotation tanımlaması geldi. jsf 1.2 ile bir managed bean yazalım ve aynı managed bean'i  jsf 2.0'da yeniden yazalım.&lt;br /&gt;
&lt;br /&gt;
jsf 1.2 için :&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;TestBean.java&lt;/b&gt;&lt;br /&gt;
&lt;pre class="brush: java;"&gt;public class TestBean {

 private String name;

 public String getName() {
  return name;
 }

 public void setName(String name) {
  this.name = name;
 }
}
&lt;/pre&gt;&lt;b&gt;faces-config.xml tanımı&lt;/b&gt;&lt;br /&gt;
&lt;pre class="brush: xml;"&gt;&amp;lt;managed-bean&amp;gt;
    &amp;lt;managed-bean-name&amp;gt;testBean&amp;lt;/managed-bean-name&amp;gt;
    &amp;lt;managed-bean-class&amp;gt;TestBean&amp;lt;/managed-bean-class&amp;gt;
    &amp;lt;managed-bean-scope&amp;gt;request&amp;lt;/managed-bean-scope&amp;gt;
&amp;lt;/managed-bean&amp;gt;
&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
jsf 2.0 için&lt;br /&gt;
&lt;pre class="brush: java;"&gt;import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;

@ManagedBean(name="testBean")
@RequestScoped
public class TestBean {

 private String name;

 public String getName() {
  return name;
 }

 public void setName(String name) {
  this.name = name;
 }
}
&lt;/pre&gt;&lt;br /&gt;
faces-config için tanımlama yapmamıza gerek yok. Çünkü &lt;b&gt;@ManagedBean(name="testBean")&lt;/b&gt; diyerek bunun bir managed bean olduğunu ve jsf sayfalarında &lt;b&gt;testBean&lt;/b&gt; adı ile erişeceğimiz bildirdik. &lt;b&gt;@RequestScoped&lt;/b&gt; ile hangi scope'ta kullanacağımızı bildirdik. Aslında faces-config'de yazdığımız her satırın karşılığını doğrudan bean içinde tanımlamış olduk. Aşağıdaki şemada jsf 2.0'daki bean'in faces-config.xml'deki karşılıkları var.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_ELhi79hYqkg/S3FfY-P9BDI/AAAAAAAAAGE/pGeJYGxmlQQ/s1600-h/jsf_2_managed_bean.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="467" src="http://4.bp.blogspot.com/_ELhi79hYqkg/S3FfY-P9BDI/AAAAAAAAAGE/pGeJYGxmlQQ/s640/jsf_2_managed_bean.PNG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Şimdi bu örnek bean'imizi jsf sayfamızdan kullanalım. Önce testbean'a bir save methodu ekleyeyim&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: java;"&gt;import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;

@ManagedBean(name="testBean")
@RequestScoped
public class TestBean {

 private String name;

 public String getName() {
  return name;
 }

 public void setName(String name) {
  this.name = name;
 }

 public void save() {
  System.out.println("Ad = " + name);
 }
}
&lt;/pre&gt;&lt;br /&gt;
&lt;b&gt;testBean.xhtml&lt;/b&gt;&lt;br /&gt;
&lt;pre class="brush: xml;"&gt;&amp;lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&amp;gt;
&amp;lt;html xmlns="http://www.w3.org/1999/xhtml"
 xmlns:h="http://java.sun.com/jsf/html"
 xmlns:f="http://java.sun.com/jsf/core"
 xmlns:ui="http://java.sun.com/jsf/facelets"&amp;gt;

&amp;lt;h:head&amp;gt;
 &amp;lt;title&amp;gt;JSF 2.0 test bean&amp;lt;/title&amp;gt;
&amp;lt;/h:head&amp;gt;
&amp;lt;h:body&amp;gt;
 &amp;lt;h:form&amp;gt;
  &amp;lt;h:outputText value="Ad :" /&amp;gt;
  &amp;lt;h:inputText value="#{testBean.name}" /&amp;gt;
  &amp;lt;h:commandButton action="#{testBean.save}" value="Kaydet" /&amp;gt;
 &amp;lt;/h:form&amp;gt;
&amp;lt;/h:body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2509844667593749835-3413744147466076411?l=jsf-tr.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/EZ0XL4BGzgzesTXlovdkEMLgKzg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/EZ0XL4BGzgzesTXlovdkEMLgKzg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/EZ0XL4BGzgzesTXlovdkEMLgKzg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/EZ0XL4BGzgzesTXlovdkEMLgKzg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/JavaserverFaces/~4/SBAB4xiv7xU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jsf-tr.blogspot.com/feeds/3413744147466076411/comments/default" title="Kayıt Yorumları" /><link rel="replies" type="text/html" href="http://jsf-tr.blogspot.com/2010/02/jsf-2-ile-managed-bean-ve-scope-kullanm.html#comment-form" title="8 Yorum" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2509844667593749835/posts/default/3413744147466076411?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2509844667593749835/posts/default/3413744147466076411?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JavaserverFaces/~3/SBAB4xiv7xU/jsf-2-ile-managed-bean-ve-scope-kullanm.html" title="jsf 2 ile managed bean ve scope kullanımı" /><author><name>ibrahim demir</name><uri>http://www.blogger.com/profile/14063980678411736699</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="23" src="http://4.bp.blogspot.com/_ELhi79hYqkg/S1mqZHoY-NI/AAAAAAAAAFA/RV2hY7WhL7U/S220/id.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_ELhi79hYqkg/S3FfY-P9BDI/AAAAAAAAAGE/pGeJYGxmlQQ/s72-c/jsf_2_managed_bean.PNG" height="72" width="72" /><thr:total>8</thr:total><feedburner:origLink>http://jsf-tr.blogspot.com/2010/02/jsf-2-ile-managed-bean-ve-scope-kullanm.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CU8DQHw8cSp7ImA9WxBWF0w.&quot;"><id>tag:blogger.com,1999:blog-2509844667593749835.post-2064537545112936283</id><published>2010-02-04T21:04:00.002+02:00</published><updated>2010-02-09T13:11:11.279+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-09T13:11:11.279+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Kurulum" /><category scheme="http://www.blogger.com/atom/ns#" term="jsf 2" /><title>jsf 2 kurulumu</title><content type="html">1. JavaServer Faces &lt;a href="https://javaserverfaces.dev.java.net/download.html"&gt;download sayfasından&lt;/a&gt; jsf 2.0'ın en son versiyonunu "binary bundle" indirin.&lt;br /&gt;
&lt;br /&gt;
2. Eclipse'te ctrl + n ile açılan ekrandan demo4 isimli Dynamic Web Project oluşturalım.&lt;br /&gt;
&lt;br /&gt;
3. İndirdiğiniz &lt;b&gt;mojarra&lt;/b&gt; klasörünün içinde &lt;b&gt;lib&lt;/b&gt; klasöründe &lt;b&gt;jsf-api.jar&lt;/b&gt; ve &lt;b&gt;jsf-impl.jar&lt;/b&gt; jar dosyalarını WEB-INF\lib klasörüne kopyalayın.&lt;br /&gt;
&lt;br /&gt;
4. web.xml dosyasının içeriği&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;web.xml&lt;/b&gt;&lt;br /&gt;
&lt;pre class="brush: xml;"&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;
&amp;lt;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_2_5.xsd"
 id="WebApp_ID" version="2.5"&amp;gt;
 &amp;lt;display-name&amp;gt;demo4&amp;lt;/display-name&amp;gt;

 &amp;lt;servlet&amp;gt;
  &amp;lt;servlet-name&amp;gt;Faces Servlet&amp;lt;/servlet-name&amp;gt;
  &amp;lt;servlet-class&amp;gt;javax.faces.webapp.FacesServlet&amp;lt;/servlet-class&amp;gt;
  &amp;lt;load-on-startup&amp;gt; 1 &amp;lt;/load-on-startup&amp;gt;
 &amp;lt;/servlet&amp;gt;

 &amp;lt;!-- Faces Servlet Mapping --&amp;gt;
 &amp;lt;servlet-mapping&amp;gt;
  &amp;lt;servlet-name&amp;gt;Faces Servlet&amp;lt;/servlet-name&amp;gt;
  &amp;lt;url-pattern&amp;gt;*.jsf&amp;lt;/url-pattern&amp;gt;
 &amp;lt;/servlet-mapping&amp;gt;

 &amp;lt;welcome-file-list&amp;gt;
  &amp;lt;welcome-file&amp;gt;index.html&amp;lt;/welcome-file&amp;gt;
 &amp;lt;/welcome-file-list&amp;gt;
&amp;lt;/web-app&amp;gt;
&lt;/pre&gt;&lt;br /&gt;
Jsf 2'yi kullanabilirsiniz hepsi bu kadar. Artık Facelet için ek dosya ve ayara gerek yok. ManagedBean, Custom Validator, Custom Converter vb için faces-config.xml'e gerek yok.&lt;br /&gt;
&lt;br /&gt;
Şimdi jsf 2.0'ı test etmek için ilk sayfamızı yazalım&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;test.xhtml&lt;/b&gt; &lt;br /&gt;
&lt;pre class="brush: xml;"&gt;&amp;lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&amp;gt;
&amp;lt;html xmlns="http://www.w3.org/1999/xhtml"
 xmlns:h="http://java.sun.com/jsf/html"
 xmlns:f="http://java.sun.com/jsf/core"
 xmlns:ui="http://java.sun.com/jsf/facelets"&amp;gt;

&amp;lt;h:head&amp;gt;
 &amp;lt;title&amp;gt;JSF 2.0&amp;lt;/title&amp;gt;
&amp;lt;/h:head&amp;gt;
&amp;lt;h:body&amp;gt;
jsf 2.0 ilk deneme
&amp;lt;/h:body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2509844667593749835-2064537545112936283?l=jsf-tr.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/7MjAeMkbrn30gIaK_0FAcdTWLDo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/7MjAeMkbrn30gIaK_0FAcdTWLDo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/7MjAeMkbrn30gIaK_0FAcdTWLDo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/7MjAeMkbrn30gIaK_0FAcdTWLDo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/JavaserverFaces/~4/Fpgq6B3N_vQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jsf-tr.blogspot.com/feeds/2064537545112936283/comments/default" title="Kayıt Yorumları" /><link rel="replies" type="text/html" href="http://jsf-tr.blogspot.com/2010/02/jsf-20-kurulumu.html#comment-form" title="4 Yorum" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2509844667593749835/posts/default/2064537545112936283?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2509844667593749835/posts/default/2064537545112936283?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JavaserverFaces/~3/Fpgq6B3N_vQ/jsf-20-kurulumu.html" title="jsf 2 kurulumu" /><author><name>ibrahim demir</name><uri>http://www.blogger.com/profile/14063980678411736699</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="23" src="http://4.bp.blogspot.com/_ELhi79hYqkg/S1mqZHoY-NI/AAAAAAAAAFA/RV2hY7WhL7U/S220/id.jpg" /></author><thr:total>4</thr:total><feedburner:origLink>http://jsf-tr.blogspot.com/2010/02/jsf-20-kurulumu.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUQFRHozfSp7ImA9WxBWEko.&quot;"><id>tag:blogger.com,1999:blog-2509844667593749835.post-1730071623857978983</id><published>2010-02-04T00:07:00.001+02:00</published><updated>2010-02-04T10:48:35.485+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-04T10:48:35.485+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="JSF" /><category scheme="http://www.blogger.com/atom/ns#" term="i18n" /><title>jsf i18n yerelleştirme ayarları (Internationalization and localization)</title><content type="html">Message Bundle kullanarak bir web sayfasını birden fazla dilde gösterebiliriz. Message Bundle &lt;a href="http://jsf-tr.blogspot.com/2010/02/message-resoure-bundle.html"&gt;örneğimizdeki&lt;/a&gt; Sistem login sayfasını hem turkce hemde ingilizce olarak goruntuleyen bir yapı oluşturalım.Örnekteki web sayfasını login.xhtml adı ile kaydedelim.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;login.xhtml&lt;/b&gt;&lt;br /&gt;
&lt;pre class="brush:xml;"&gt;&amp;lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&amp;gt;
&amp;lt;html xmlns="http://www.w3.org/1999/xhtml"
 xmlns:h="http://java.sun.com/jsf/html"
 xmlns:f="http://java.sun.com/jsf/core"
 xmlns:ui="http://java.sun.com/jsf/facelets"&amp;gt;

&amp;lt;head&amp;gt;
&amp;lt;title&amp;gt;Login Page&amp;lt;/title&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
&amp;lt;h:form&amp;gt;
 &amp;lt;f:loadBundle var="msg" basename="MessageResources" /&amp;gt;
 &amp;lt;h:panelGrid style="border: 1px solid olive; width:350px" columns="2"
  cellspacing="5" cellpadding="0"&amp;gt;
  &amp;lt;f:facet name="header"&amp;gt;#{msg['system_login']}&amp;lt;/f:facet&amp;gt;
  &amp;lt;h:outputText value="#{msg['username']}" /&amp;gt;
  &amp;lt;h:inputText value="" /&amp;gt;
  &amp;lt;h:outputText value="#{msg['password']}" /&amp;gt;
  &amp;lt;h:inputText value="" /&amp;gt;
  &amp;lt;h:panelGroup /&amp;gt;
  &amp;lt;h:commandButton value="#{msg['login']}" action="LOGIN" /&amp;gt;
 &amp;lt;/h:panelGrid&amp;gt;
&amp;lt;/h:form&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/pre&gt;&lt;br /&gt;
iki tane MessageResources dosyası oluşturalım. Önceki örnekten farkı bu dosyaların hangi dilde olduklarını göstermek için sonuna _xx şekline dil kodu ekleyeceğiz.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;MessageResources_tr.properties&lt;/b&gt;&lt;br /&gt;
&lt;pre class="brush: xml;"&gt;system_login=Oturum Ac
username=Kullanici
password=Sifre
login=Giris
&lt;/pre&gt;&lt;b&gt;MessageResources_en.properties&lt;/b&gt;&lt;br /&gt;
&lt;pre class="brush: xml;"&gt;system_login=System Login
username=Username
password=Password
login=Login
&lt;/pre&gt;&lt;br /&gt;
faces-config.xml'deki application kısmını aşağıdaki gibi yeniden yazın.&lt;br /&gt;
&lt;pre class="brush: xml;"&gt; &amp;lt;application&amp;gt;
  &amp;lt;locale-config&amp;gt;
   &amp;lt;default-locale&amp;gt;tr&amp;lt;/default-locale&amp;gt;
   &amp;lt;supported-locale&amp;gt;tr&amp;lt;/supported-locale&amp;gt;
   &amp;lt;supported-locale&amp;gt;en&amp;lt;/supported-locale&amp;gt;
  &amp;lt;/locale-config&amp;gt;
  &amp;lt;message-bundle&amp;gt;MessageResources&amp;lt;/message-bundle&amp;gt;
 &amp;lt;/application&amp;gt;
&lt;/pre&gt;&lt;br /&gt;
Şimdi sayfayı çalıştırısak &lt;b&gt;default-locale&lt;/b&gt;deki dil ile görüntülenir. Eğer o parametreyi yazmazsak web tarayıcımızın varsyılan dili ile görüntülenir. Ancak biz kullanıcının istediği an dili değiştirebilmesi için locale'ini dinamik olarak değiştireceğiz. Bunun için sayfamıza 2 adet commandLink ekleyeceğiz bir türkçe diğer ingilizce olarak sayfanın görtüntülenmesini sağlayacak. Ayrıca saydanın istenilen dilde görüntülenmesini sağlamak için &lt;b&gt;&amp;lt;f:view&amp;gt;&lt;/b&gt; bileşenini kullanacağız. Bu bileşenin locale özlelliğine managedbean'de dinamik olarak değer atayarak sayfamızı istediğiniz dilde gösterebiliriz.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;login.xhtml&lt;/b&gt;&lt;br /&gt;
&lt;pre class="brush: xml;"&gt;&amp;lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&amp;gt;
&amp;lt;html xmlns="http://www.w3.org/1999/xhtml"
 xmlns:h="http://java.sun.com/jsf/html"
 xmlns:f="http://java.sun.com/jsf/core"
 xmlns:ui="http://java.sun.com/jsf/facelets"&amp;gt;

&amp;lt;head&amp;gt;
&amp;lt;title&amp;gt;Message Resource Bundle Example&amp;lt;/title&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
&amp;lt;f:view locale="#{loginPage.locale}"&amp;gt;
 &amp;lt;h:form&amp;gt;
  &amp;lt;f:loadBundle var="msg" basename="MessageResources" /&amp;gt;
  &amp;lt;h:commandLink action="#{loginPage.setTurkish}" value="Türkçe" /&amp;gt;
  #{' '}
  &amp;lt;h:commandLink action="#{loginPage.setEnglish}" value="English" /&amp;gt;
  &amp;lt;h:panelGrid style="border: 1px solid olive; width:350px" columns="2"
   cellspacing="5" cellpadding="0"&amp;gt;
   &amp;lt;f:facet name="header"&amp;gt;#{msg['system_login']}&amp;lt;/f:facet&amp;gt;
   &amp;lt;h:outputText value="#{msg['username']}" /&amp;gt;
   &amp;lt;h:inputText value="" /&amp;gt;
   &amp;lt;h:outputText value="#{msg['password']}" /&amp;gt;
   &amp;lt;h:inputText value="" /&amp;gt;
   &amp;lt;h:panelGroup /&amp;gt;
   &amp;lt;h:commandButton value="#{msg['login']}" action="LOGIN" /&amp;gt;
  &amp;lt;/h:panelGrid&amp;gt;
 &amp;lt;/h:form&amp;gt;
&amp;lt;/f:view&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/pre&gt;&lt;b&gt;LoginPage.java, ManagedBean Adı = loginPage, scope=Session&lt;/b&gt;&lt;br /&gt;
&lt;pre class="brush: java;"&gt;import javax.faces.context.FacesContext;

public class LoginPage {
 private String locale;

 public LoginPage() {
  if (locale == null) {
        // Oturum ilk çalıştığında locale değerimiz boş olacağından varsayılan
        // locale değerini alıp onunla sayfayı görüntülüyoruz.
   FacesContext context = FacesContext.getCurrentInstance();
   locale = context.getViewRoot().getLocale().getLanguage();
  }
 }

 public String getLocale() {
  return locale;
 }

 public void setLocale(String locale) {
  this.locale = locale;
 }

 public void setTurkish() {
  locale = "tr";
 }

 public void setEnglish() {
  locale = "en";
 }
}
&lt;/pre&gt;&lt;br /&gt;
Bu örnekte tek sayfa için bu işlemi yaptık. Eğer isterseniz &lt;a href="http://jsf-tr.blogspot.com/2010/01/jsf-sablon-kullanm-facelet-templating.html"&gt;facelet şablon kullanımı&lt;/a&gt; ile şablona &lt;b&gt;&amp;lt;f:view&amp;gt;&lt;/b&gt; tanımlamasını yaparak tüm projede dil tanımı kullabiliriz Ayrıca kullanıcının login yaptığı daha önce saklayabileceğimiz bir locale değeriniden getirip kullanabiliriz&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2509844667593749835-1730071623857978983?l=jsf-tr.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/SL-M16T8AFD74e2Wxw9SXzTvWyk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/SL-M16T8AFD74e2Wxw9SXzTvWyk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/SL-M16T8AFD74e2Wxw9SXzTvWyk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/SL-M16T8AFD74e2Wxw9SXzTvWyk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/JavaserverFaces/~4/b-tX-Zsu5hg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jsf-tr.blogspot.com/feeds/1730071623857978983/comments/default" title="Kayıt Yorumları" /><link rel="replies" type="text/html" href="http://jsf-tr.blogspot.com/2010/02/jsf-i18n-yerellestirme-ayarlar.html#comment-form" title="0 Yorum" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2509844667593749835/posts/default/1730071623857978983?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2509844667593749835/posts/default/1730071623857978983?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JavaserverFaces/~3/b-tX-Zsu5hg/jsf-i18n-yerellestirme-ayarlar.html" title="jsf i18n yerelleştirme ayarları (Internationalization and localization)" /><author><name>ibrahim demir</name><uri>http://www.blogger.com/profile/14063980678411736699</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="23" src="http://4.bp.blogspot.com/_ELhi79hYqkg/S1mqZHoY-NI/AAAAAAAAAFA/RV2hY7WhL7U/S220/id.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://jsf-tr.blogspot.com/2010/02/jsf-i18n-yerellestirme-ayarlar.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEECRHc4cSp7ImA9WxBWE0g.&quot;"><id>tag:blogger.com,1999:blog-2509844667593749835.post-6560678226696736781</id><published>2010-02-03T21:56:00.002+02:00</published><updated>2010-02-05T09:57:45.939+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-05T09:57:45.939+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Message Bundle" /><category scheme="http://www.blogger.com/atom/ns#" term="i18n" /><title>Message Resource Bundle</title><content type="html">JSF'de sabit olarak yazdığımız mesaj, etiket vb değerleri bir mesaj dosyasından getirmek için Message Bundle kullanırız. Aşağıda web sayfasını message bundle ile yapalım&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;testMessage.xhtml&lt;/b&gt;&lt;br /&gt;
&lt;pre class="brush: xml;"&gt;&amp;lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&amp;gt;
&amp;lt;html xmlns="http://www.w3.org/1999/xhtml"
 xmlns:h="http://java.sun.com/jsf/html"
 xmlns:f="http://java.sun.com/jsf/core"
 xmlns:ui="http://java.sun.com/jsf/facelets"&amp;gt;

&amp;lt;head&amp;gt;
&amp;lt;title&amp;gt;Message Resource Bundle Example&amp;lt;/title&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
&amp;lt;h:form&amp;gt;
 &amp;lt;h:panelGrid style="border: 1px solid olive; width:350px" columns="2"
  cellspacing="5" cellpadding="0"&amp;gt;
  &amp;lt;f:facet name="header"&amp;gt;System Login&amp;lt;/f:facet&amp;gt;
  &amp;lt;h:outputText value="Username" /&amp;gt;
  &amp;lt;h:inputText value="" /&amp;gt;
  &amp;lt;h:outputText value="Password" /&amp;gt;
  &amp;lt;h:inputText value="" /&amp;gt;
  &amp;lt;h:panelGroup /&amp;gt;
  &amp;lt;h:commandButton value="Login" action="LOGIN" /&amp;gt;
 &amp;lt;/h:panelGrid&amp;gt;
&amp;lt;/h:form&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/pre&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_ELhi79hYqkg/S2p7ojcKkOI/AAAAAAAAAFw/m75c4BGwIcw/s1600-h/message_bundle_1.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_ELhi79hYqkg/S2p7ojcKkOI/AAAAAAAAAFw/m75c4BGwIcw/s320/message_bundle_1.PNG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Aşağıdaki değerleri message dosyasından getireceğiz&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;b&gt;System Login&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Username&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Password&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Login&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
Şimdi java nesnelerini yazdığımız src klasörü altına MessageResources adında bir property dosyası yaratalım ve içeriği aşağıdaki gibi olsun. &lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;MessageResources.properties&lt;/b&gt;&lt;br /&gt;
&lt;pre class="brush: plain;"&gt;system_login=System Login
username=Username
password=Password
login=Login
&lt;/pre&gt;&lt;br /&gt;
Property dosyalarında tanımlamalar &lt;b&gt;keyword=value&lt;/b&gt; şeklinde yapılır.Web sayfalarında değerleri keywordlar yardımı ile çağrırırız. Message Bundle'ı kullanabilmek için faces-config'de application içerisine tanımlama yapılır.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: xml;"&gt;&amp;lt;application&amp;gt;
  &amp;lt;message-bundle&amp;gt;MessageResources&amp;lt;/message-bundle&amp;gt;
 &amp;lt;/application&amp;gt;
&lt;/pre&gt;&lt;br /&gt;
Artık web sayfamıza message bundle ekleyebiliriz &lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;messageTest.xhtml&lt;/b&gt;&lt;br /&gt;
&lt;pre class="brush:xml;"&gt;&amp;lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&amp;gt;
&amp;lt;html xmlns="http://www.w3.org/1999/xhtml"
 xmlns:h="http://java.sun.com/jsf/html"
 xmlns:f="http://java.sun.com/jsf/core"
 xmlns:ui="http://java.sun.com/jsf/facelets"&amp;gt;

&amp;lt;head&amp;gt;
&amp;lt;title&amp;gt;Message Resource Bundle Example&amp;lt;/title&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
&amp;lt;h:form&amp;gt;
 &amp;lt;f:loadBundle var="msg" basename="MessageResources" /&amp;gt;
 &amp;lt;h:panelGrid style="border: 1px solid olive; width:350px" columns="2"
  cellspacing="5" cellpadding="0"&amp;gt;
  &amp;lt;f:facet name="header"&amp;gt;#{msg['system_login']}&amp;lt;/f:facet&amp;gt;
  &amp;lt;h:outputText value="#{msg['username']}" /&amp;gt;
  &amp;lt;h:inputText value="" /&amp;gt;
  &amp;lt;h:outputText value="#{msg['password']}" /&amp;gt;
  &amp;lt;h:inputText value="" /&amp;gt;
  &amp;lt;h:panelGroup /&amp;gt;
  &amp;lt;h:commandButton value="#{msg['login']}" action="LOGIN" /&amp;gt;
 &amp;lt;/h:panelGrid&amp;gt;
&amp;lt;/h:form&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/pre&gt;&lt;b&gt;&amp;lt;f:loadBundle var="msg" basename="MessageResources" /&amp;gt;&lt;/b&gt; bileşenini ile messeage bundle'e ekledik. Sayfa içinde değişkenimi msg oldu. Bundan sonrası dizi ve map benzeri bir kullanıma sahiptir. Username değerini ekrana yazdırmak için &lt;b&gt;username&lt;/b&gt; keyword'ü ile msg'dan değeri çekeriz Kullanım şekli:&lt;b&gt;#{msg['username']}&lt;/b&gt; şeklindedir. İsterseniz property dosyasında değerleri değiştirip sayfanızı yeninden görüntüleyin. Ekrandaki değerlerin değiştiğini göreceksiniz.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2509844667593749835-6560678226696736781?l=jsf-tr.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/M5GEgNHxHfd9Ku3DGeYlY4JZjGk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/M5GEgNHxHfd9Ku3DGeYlY4JZjGk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/M5GEgNHxHfd9Ku3DGeYlY4JZjGk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/M5GEgNHxHfd9Ku3DGeYlY4JZjGk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/JavaserverFaces/~4/cNcF2mi9qgI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jsf-tr.blogspot.com/feeds/6560678226696736781/comments/default" title="Kayıt Yorumları" /><link rel="replies" type="text/html" href="http://jsf-tr.blogspot.com/2010/02/message-resoure-bundle.html#comment-form" title="2 Yorum" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2509844667593749835/posts/default/6560678226696736781?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2509844667593749835/posts/default/6560678226696736781?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JavaserverFaces/~3/cNcF2mi9qgI/message-resoure-bundle.html" title="Message Resource Bundle" /><author><name>ibrahim demir</name><uri>http://www.blogger.com/profile/14063980678411736699</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="23" src="http://4.bp.blogspot.com/_ELhi79hYqkg/S1mqZHoY-NI/AAAAAAAAAFA/RV2hY7WhL7U/S220/id.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_ELhi79hYqkg/S2p7ojcKkOI/AAAAAAAAAFw/m75c4BGwIcw/s72-c/message_bundle_1.PNG" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://jsf-tr.blogspot.com/2010/02/message-resoure-bundle.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CU4ESHg6eip7ImA9WxBWF0Q.&quot;"><id>tag:blogger.com,1999:blog-2509844667593749835.post-31640645268095519</id><published>2010-02-03T01:17:00.008+02:00</published><updated>2010-02-10T11:25:09.612+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-10T11:25:09.612+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="EntityManager" /><category scheme="http://www.blogger.com/atom/ns#" term="jpa" /><category scheme="http://www.blogger.com/atom/ns#" term="JSF" /><title>Tomcat ile JPA EntityManager Kullanımı - 5  (Veri katmanı)</title><content type="html">JPA ile ilgili yaptığımız örnekte farkındaysanız her seferinde bağlantı açıp kapatıyoruz bu da bizim için performans sorunu yaratıyor. Bunu yerine server açılırken EntityManagerFactory yaratıp saklasak ve gerektiğinde bu bileşeni çağırıp kullansak daha iyi olmaz mı? Bu işlem için ServletContextListener bileşenini kullanacağız. Öncelikle PersistenceListener isimli bir ContextListener yazalım.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;PersistenceListener.java&lt;/b&gt;&lt;br /&gt;
&lt;pre class="brush: java;"&gt;import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

public class PersistenceListener implements ServletContextListener {

 private EntityManagerFactory emf;

 public void contextInitialized(ServletContextEvent event) {
  ServletContext context = event.getServletContext();
  emf = Persistence.createEntityManagerFactory("demo3PU");
  context.setAttribute("demo3EMF", emf);
 }

 public void contextDestroyed(ServletContextEvent event) {
  ServletContext context = event.getServletContext();
  emf = (EntityManagerFactory) context.getAttribute("demo3EMF");
  emf.close();
 }

}
&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
PersistenceListener tomcat sunusucu açılırken bir tane EntityManagerFactory nesnesi oluşturur ve sunucu kapatılana kadar saklar. Biz bu nesneyi çağırarak işlemlerimizi yapabiliriz. StudentAdapter'ı yeni yapıya uygun hale getirelim ve constructor'ında EntityManagerFactory'yi Context'ten alalım. Ama öncelikle açılışta Listener'ımızın çalışabilmesi için web.xml'e aşağıdaki tanımlamayı eklemeliyiz.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: xml;"&gt;&amp;lt;listener&amp;gt;
 &amp;lt;listener-class&amp;gt;PersistenceListener&amp;lt;/listener-class&amp;gt;
&amp;lt;/listener&amp;gt;
&lt;/pre&gt;&lt;br /&gt;
&lt;b&gt;StudentAdapter.java&lt;/b&gt;&lt;br /&gt;
&lt;pre class="brush: java;"&gt;import java.util.List;

import javax.faces.context.FacesContext;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.servlet.ServletContext;

public class StudentAdapter {

 private EntityManagerFactory emf;

 public StudentAdapter() {
  FacesContext facesContext = FacesContext.getCurrentInstance();
  ServletContext servletContext = (ServletContext) facesContext
    .getExternalContext().getContext();
  emf = (EntityManagerFactory) servletContext.getAttribute("demo3EMF");
 }

 public List&amp;lt;Student&amp;gt; getList() {
  EntityManager em = emf.createEntityManager();
  List&amp;lt;Student&amp;gt; students = em.createQuery("SELECT s FROM Student s")
    .getResultList();
  em.close();
  return students;
 }

 public Student getStudent(int id) {
  EntityManager em = emf.createEntityManager();
  List&amp;lt;Student&amp;gt; students = em.createQuery(
    "SELECT s FROM Student s WHERE s.id = :id").setParameter("id",
    id).getResultList();
  em.close();
  Student student = new Student();
  if (students.size() &amp;gt; 0)
   student = students.get(0);
  return student;
 }

 public void insert(Student student) {
  EntityManager em = emf.createEntityManager();
  em.getTransaction().begin();
  em.persist(student);
  em.getTransaction().commit();
  em.close();
 }

 public void update(Student student) {
  EntityManager em = emf.createEntityManager();
  em.getTransaction().begin();
  em.merge(student);
  em.getTransaction().commit();
  em.close();
 }

 public void delete(Student student) {
  EntityManager em = emf.createEntityManager();
  em.getTransaction().begin();
  student = em.find(student.getClass(), student.getId());
  em.remove(student);
  em.getTransaction().commit();
  em.close();
 }

}
&lt;/pre&gt;&lt;br /&gt;
JSF projemiz bundan sonra JPA ile birlikte çalışacaktır.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2509844667593749835-31640645268095519?l=jsf-tr.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/n0Mr17eGobXNQu4KTJinGbf8PdA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/n0Mr17eGobXNQu4KTJinGbf8PdA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/n0Mr17eGobXNQu4KTJinGbf8PdA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/n0Mr17eGobXNQu4KTJinGbf8PdA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/JavaserverFaces/~4/KGWy1MTyI-A" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jsf-tr.blogspot.com/feeds/31640645268095519/comments/default" title="Kayıt Yorumları" /><link rel="replies" type="text/html" href="http://jsf-tr.blogspot.com/2010/02/jsf-ve-tomcat-ile-jpa-entitymanager_4367.html#comment-form" title="2 Yorum" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2509844667593749835/posts/default/31640645268095519?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2509844667593749835/posts/default/31640645268095519?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JavaserverFaces/~3/KGWy1MTyI-A/jsf-ve-tomcat-ile-jpa-entitymanager_4367.html" title="Tomcat ile JPA EntityManager Kullanımı - 5  (Veri katmanı)" /><author><name>ibrahim demir</name><uri>http://www.blogger.com/profile/14063980678411736699</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="23" src="http://4.bp.blogspot.com/_ELhi79hYqkg/S1mqZHoY-NI/AAAAAAAAAFA/RV2hY7WhL7U/S220/id.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://jsf-tr.blogspot.com/2010/02/jsf-ve-tomcat-ile-jpa-entitymanager_4367.html</feedburner:origLink></entry></feed>

