Nesta postagem sera mostrado um exemplo pratico (CRUD de pessoas) para aqueles que desejam iniciar o uso da tecnologia JSF. Para isso, sera utilizado o servidor de aplicacao Apache Tomcat 6.0 e a IDE Eclipse Ganymede.Para comecar, e preciso criar um novo projeto. No Eclipse, basta abrir o menu file conforme mostrado na figura 1. Em seguida, sera aberta uma tela para escolher o tipo de aplicacao que sera desenvolvida. No caso do exemplo, selecione Dynamic Web Project (figura 2) e clique no botao Next.Na sequencia, de um nome para o projeto (no exemplo sera jsfdemo) e selecione a combo Target RunTime para Apache Tomcat v6.0 (figura 3). Depois, clique no botao Finish que o projeto estara criado.Um vez criado o projeto, e necessario configurar o ambiente para que a aplicacao funcione. Para isso, faca o download da ultima versao do JSF e extraia os jars para a pasta WEB-INF/lib do projeto. Por fim, e necessario configurar o web.xml do projeto, cuja configuracao e mostrada na listagem 1.Figura 1:Novo projetoFigura 2: Dynamic Web ProjectFigura 3: Configuracao inicial do projeto<?xml version="1.0" encoding="UTF-8"?><web-app><context-param><param-name>javax.faces.STATE_SAVING_METHOD</param-name><param-value>server</param-value></context-param><servlet><servlet-name>Faces Servlet</servlet-name><servlet-class>javax.faces.webapp.FacesServlet</servlet-class><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>Faces Servlet</servlet-name><url-pattern>*.faces</url-pattern></servlet-mapping></web-app>Listagem 1: web.xmlA partir deste ponto ja podemos comecar a efetivamente desenvolver a aplicacao de exemplo.Construindo a aplicacaoPara iniciar, vamos criar os seguintes pacotes na projeto:com.sample.controller;com.sample.dao;com.sample.model.A figura 4 ilustra a organizacao dos pacotes no eclipse.Figura 4: PacotesDentro do pacote model vamos criar a classe pessoa cujo codigo e listado na listagem 2.package com.sample.model;public class Pessoa {private Integer id;private String nome;private String nacionalidade;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getNome() {return nome;}public void setNome(String nome) {this.nome = nome;}public String getNacionalidade() {return nacionalidade;}public void setNacionalidade(String nacionalidade) {this.nacionalidade = nacionalidade;}@Overridepublic int hashCode() {final int prime = 31;int result = 1;result = prime * result + ((id == null) ? 0 : id.hashCode());return result;}@Overridepublic boolean equals(Object obj) {if (this == obj)return true;if (obj == null)return false;if (getClass() != obj.getClass())return false;Pessoa other = (Pessoa) obj;if (id == null) {if (other.id != null)return false;} else if (!id.equals(other.id))return false;return true;}}Listagem 2: Pessoa.javaDentro do pacote dao vamos definir a interface PessoaDao cujo codigo e mostrado na listagem 3.package com.sample.dao;import java.util.List;import com.sample.model.Pessoa;public interface PessoaDao {void save(Pessoa pessoa);void delete(Integer id);Pessoa getById(Integer id);List<Pessoa> findAll();}Listagem 3: PessoaDao.javaDentro do pacote dao e necessario criar tambem a implementacao da interface PessoaDao. No caso do exemplo sera definido a classe PessoaDaoImpl (listagem 4).package com.sample.dao;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import com.sample.model.Pessoa;public class PessoaDaoImpl implements PessoaDao {private static PessoaDaoImpl INSTANCE = new PessoaDaoImpl();private static Map<Integer, Pessoa> database= new HashMap<Integer, Pessoa>();private static Integer nextId = 0;private PessoaDaoImpl() {}public static PessoaDaoImpl getInstance() {return INSTANCE;}@Overridepublic void save(Pessoa pessoa) {if (pessoa != null) {if (pessoa.getId() == null) {nextId++;pessoa.setId(nextId);}database.put(pessoa.getId(), pessoa);}}@Overridepublic void delete(Integer id) {if (id != null)database.remove(id);}@Overridepublic Pessoa getById(Integer id) {return database.get(id);}@Overridepublic List<Pessoa> findAll() {return new ArrayList<Pessoa>(database.values());}}Listagem 4: PessoaDaoImpl.javaDentro do pacote controller vamos definir a classe PessoaController que sera o nosso managed bean (listagem 5).package com.sample.controller;import java.util.List;import javax.faces.context.FacesContext;import com.sample.dao.PessoaDao;import com.sample.dao.PessoaDaoImpl;import com.sample.model.Pessoa;public class PessoaController {private PessoaDao pessoaDao = PessoaDaoImpl.getInstance();private Pessoa pessoa;public PessoaController() {pessoa = new Pessoa();}public void save() {pessoaDao.save(pessoa);pessoa = new Pessoa();}public void edit() {// pega o parametro passado no linkInteger id = Integer.parseInt((String)FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("id"));pessoa = pessoaDao.getById(id);}public void delete(){// pega