<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Sérgio Fantin</title>
	<atom:link href="http://serjaum.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://serjaum.wordpress.com</link>
	<description>Flex, JSF, REST, SOA...</description>
	<lastBuildDate>Fri, 30 Oct 2009 20:53:57 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<language>pt-br</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<cloud domain='serjaum.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://www.gravatar.com/blavatar/17bf84e01e50384ba625902575e681d1?s=96&#038;d=http://s.wordpress.com/i/buttonw-com.png</url>
		<title>Sérgio Fantin</title>
		<link>http://serjaum.wordpress.com</link>
	</image>
			<item>
		<title>The Developer&#8217;s Conference 2009</title>
		<link>http://serjaum.wordpress.com/2009/10/30/the-developers-conference-2009/</link>
		<comments>http://serjaum.wordpress.com/2009/10/30/the-developers-conference-2009/#comments</comments>
		<pubDate>Fri, 30 Oct 2009 20:53:57 +0000</pubDate>
		<dc:creator>serjaumfantin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://serjaum.wordpress.com/?p=866</guid>
		<description><![CDATA[
A 3ª edição do The Developer’s Conference 2009, maior evento                               Java do país, contará com a participação de        [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=serjaum.wordpress.com&blog=3927959&post=866&subd=serjaum&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p style="text-align:center;"><a style="text-decoration:none;" href="http://www.thedevelopersconference.com.br" target="_blank"><img class="aligncenter" style="border:none;" title=" The Developers Conference 2009, um evento organizado pela Globalcode" src="http://www.thedevelopersconference.com.br/banners/banner_tdc2009_468x60_gifAnimado.gif" alt=" The Developers Conference 2009, um evento organizado pela Globalcode" /></a></p>
<p>A 3ª edição do The Developer’s Conference 2009, maior evento                               Java do país, contará com a participação de                               <a title="veja a minibio do palestrante" href="http://www.thedevelopersconference.com.br/tdc/2009/sp/palestrantes.seam#ChrisSchalk"> Chris Schalk</a>,Developer Advocate do Google,                               que trabalha atualmente no time de Google App                               Engine, plataforma de Computação em Nuvem do                               Google, e também de                               <a title="veja quem são os palestrantes do TDC 2009" href="http://www.thedevelopersconference.com.br/tdc/2009/sp/palestrantes.seam#AlejandroGuizar"> Alejandro Guizar</a>, Engenheiro de Software da                               JBoss, que trabalha nos projetos jBPM, Web                               Services e Riftsaw,                               além dos principais nomes da comunidade Java mundial:                               <a title="veja a minibio do palestrante" href="http://www.thedevelopersconference.com.br/tdc/2009/sp/palestrantes.seam#EdBurns"> Ed Burns</a>,                               <a title="veja a minibio do palestrante" href="http://www.thedevelopersconference.com.br/tdc/2009/sp/palestrantes.seam#RodJohnson"> Rod Johnson</a> e                               <a title="veja a minibio do palestrante" href="http://www.thedevelopersconference.com.br/tdc/2009/sp/palestrantes.seam#MikeKeith"> Mike Keith</a>.</p>
<p>O evento acontecerá nas cidades de                               <a title="veja a programação do TDC 2009 São Paulo" href="http://www.thedevelopersconference.com.br/tdc/2009/sp/programacao.seam"> São Paulo (SP)</a>, nos dias 6 e 7 de novembro, em                               <a title="veja a programação do TDC 2009 Florianópolis" href="http://www.thedevelopersconference.com.br/tdc/2009/floripa/programacao.seam"> Florianópolis (SC)</a> no dia 09 de novembro e no                               <a title="veja a programação do TDC 2009 Rio de Janeiro" href="http://www.thedevelopersconference.com.br/tdc/2009/rio/programacao.seam"> Rio de Janeiro (RJ)</a> em 11 de novembro.</p>
<ul>
<li> Haverá tradução simultânea em todas as etapas do evento;</li>
<li> Serão emitidos certificados de participação;</li>
<li> Inscrições antecipadas com desconto especial;</li>
<li> Inscrições corporativas e caravanas.</li>
</ul>
<p>Não perca esta oportunidade de aprender com quem faz a tecnologia,                               em um evento que vai ficar na história da comunidade de                               tecnologia do Brasil.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/serjaum.wordpress.com/866/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/serjaum.wordpress.com/866/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/serjaum.wordpress.com/866/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/serjaum.wordpress.com/866/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/serjaum.wordpress.com/866/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/serjaum.wordpress.com/866/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/serjaum.wordpress.com/866/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/serjaum.wordpress.com/866/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/serjaum.wordpress.com/866/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/serjaum.wordpress.com/866/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=serjaum.wordpress.com&blog=3927959&post=866&subd=serjaum&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://serjaum.wordpress.com/2009/10/30/the-developers-conference-2009/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b984204ba36d6d9166522dd067649282?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">serjaumfantin</media:title>
		</media:content>

		<media:content url="http://www.thedevelopersconference.com.br/banners/banner_tdc2009_468x60_gifAnimado.gif" medium="image">
			<media:title type="html"> The Developers Conference 2009, um evento organizado pela Globalcode</media:title>
		</media:content>
	</item>
		<item>
		<title>JSF &#8211; Aplicação rich:editor + Facelets</title>
		<link>http://serjaum.wordpress.com/2009/09/15/jsf-aplicacao-pratica-utilizando-richeditor/</link>
		<comments>http://serjaum.wordpress.com/2009/09/15/jsf-aplicacao-pratica-utilizando-richeditor/#comments</comments>
		<pubDate>Tue, 15 Sep 2009 01:37:36 +0000</pubDate>
		<dc:creator>serjaumfantin</dc:creator>
				<category><![CDATA[Facelets]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[Hibernate]]></category>
		<category><![CDATA[JSF]]></category>
		<category><![CDATA[JUnit]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://serjaum.wordpress.com/?p=838</guid>
		<description><![CDATA[Neste post irei demonstrar a utilização do componente rich:editor que faz parte da biblioteca de componentes RichFaces.
O rich:editor é um componente usado para a criação de um editor em páginas. Seu uso é relativamente simples e o resultado é impressionante.
A aplicação consiste num cadastro de Rascunhos onde o usuário poderá cadastrar e remover seus rascunhos [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=serjaum.wordpress.com&blog=3927959&post=838&subd=serjaum&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p><span style="color:#000000;">Neste post irei demonstrar a utilização do componente <a href="http://livedemo.exadel.com/richfaces-demo/richfaces/editor.jsf?c=editor&amp;tab=usage">rich:editor</a> que faz parte da biblioteca de componentes RichFaces.</span></p>
<p><span style="color:#000000;">O rich:editor é um componente usado para a criação de um editor em páginas. Seu uso é relativamente simples e o resultado é impressionante.</span></p>
<p><span style="color:#000000;">A aplicação consiste num cadastro de Rascunhos onde o usuário poderá cadastrar e remover seus rascunhos de uma forma prática e simples. Para gerenciar as sessões/transações do Hibernate criei um serlvet filter <a href="https://www.hibernate.org/43.html">Open Session In View</a> fazendo papel de um interceptador, que será executado a cada request e response.</span></p>
<p><span style="color:#000000;">Utilizarei <a href="http://tomcat.apache.org/">Tomcat</a>, <a href="https://www.hibernate.org/">Hibernate</a> e <a href="http://www.mysql.com/">MySQL</a> para a persistência de dados e disponilizarei o projeto para download.</span></p>
<h2>Estrutura do projeto</h2>
<p style="text-align:center;"><img class="aligncenter size-full wp-image-843" title="rich_editor" src="http://serjaum.files.wordpress.com/2009/09/rich_editor.png?w=280&#038;h=500" alt="rich_editor" width="280" height="500" /></p>
<h2>Versões utilizadas</h2>
<ul>
<li><span style="color:#000000;">Eclipse 3.4.1</span></li>
<li><span style="color:#000000;">JDK 1.6</span></li>
<li><span style="color:#000000;">Tomcat 6.0.18</span></li>
<li><span style="color:#000000;">MyFaces 1.2.5</span></li>
<li><span style="color:#000000;">RichFaces 3.3.1</span></li>
<li><span style="color:#000000;">Hibernate Annotations 3.4.0</span></li>
<li><span style="color:#000000;">Hibernate 3.3.1</span></li>
<li><span style="color:#000000;">MySQL 5</span></li>
<li><span style="color:#000000;">MySQL Query Browser 1.2</span></li>
</ul>
<h2>Códigos</h2>
<p><strong>Rascunho.java: </strong></p>
<blockquote>
<pre>package br.com.serjaum.modelo;

@Entity
@Table(name="rascunho")
public class Rascunho implements Serializable{

 private static final long serialVersionUID = -6142163109498247473L;

 @Id
 @GeneratedValue(strategy=GenerationType.IDENTITY)
 @Column(name="RASCUNHO_ID")
 private Long id;

 @Column(name="titulo")
 private String titulo;

 @Temporal(TemporalType.DATE)
 @Column(name="data")
 private Date data = new Date();    

 @Lob
 @Column(name="conteudo")
 private String conteudo;

...
}</pre>
</blockquote>
<p><span id="more-838"></span><strong>RascunhoMB.java: </strong></p>
<blockquote>
<pre>package br.com.serjaum.mb;

public class RascunhoMB implements Serializable {

 private static final long serialVersionUID = -7138652046367400871L;

 private Long id;

 private Rascunho rascunho = new Rascunho();

 public RascunhoMB(){
 System.out.println(" &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Construtor do RASCUNHO_MB &lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;");

 if(this.rascunho == null){
 this.rascunho = new Rascunho();
 }
 }

 public String save(){
 Session session = HibernateUtil.currentSession();
 RascunhoDAO rascunhoDAO = new RascunhoDAO(session, Rascunho.class);

 rascunhoDAO.save(this.rascunho);

 this.rascunho = new Rascunho();
 return "toIndex";
 }

 public String delete(){
 Session session = HibernateUtil.currentSession();
 RascunhoDAO rascunhoDAO = new RascunhoDAO(session, Rascunho.class);

 this.rascunho = rascunhoDAO.load(this.id);
 rascunhoDAO.delete(this.rascunho);
 this.rascunho = new Rascunho(); 

 return "removeSucesso";
 }

 public String merge(){
 Session session = HibernateUtil.currentSession();
 RascunhoDAO rascunhoDAO = new RascunhoDAO(session, Rascunho.class);
 rascunhoDAO.merge(this.rascunho);
 this.rascunho = new Rascunho(); 

 return "atualizaSucesso";
 }

 public String load(){
 Session session = HibernateUtil.currentSession();
 RascunhoDAO rascunhoDAO = new RascunhoDAO(session, Rascunho.class);

 this.rascunho = rascunhoDAO.load(this.id);

 return "pesquisaSucesso";
 }

 public String pesquisaByTitulo(){
 Session session = HibernateUtil.currentSession();
 RascunhoDAO rascunhoDAO = new RascunhoDAO(session, Rascunho.class);

 this.rascunho = rascunhoDAO.pesquisaRascunhoByTitulo(this.rascunho.getTitulo());

 return "pesquisaByTituloSucesso";
 }

 public String exibeRascunho(){
 Session session = HibernateUtil.currentSession();
 RascunhoDAO rascunhoDAO = new RascunhoDAO(session, Rascunho.class);

 this.rascunho = rascunhoDAO.load(this.id);

 return "toRascunho";
 }

 public List&lt;Rascunho&gt; getRascunhos(){
 Session session = HibernateUtil.currentSession();
 RascunhoDAO rascunhoDAO = new RascunhoDAO(session, Rascunho.class);

 return rascunhoDAO.list();
 }

 public Long getId() {
 return id;
 }

 public void setId(Long id) {
 this.id = id;
 }

 public Rascunho getRascunho() {
 return rascunho;
 }

 public void setRascunho(Rascunho rascunho) {
 this.rascunho = rascunho;
 }
}</pre>
</blockquote>
<p><strong>cadastraRascunho.xhtml: </strong></p>
<blockquote>
<pre>&lt;?xml version="1.0" encoding="ISO-8859-1"?&gt;
&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;
&lt;html xmlns="http://www.w3.org/1999/xhtml"
 xmlns:ui="http://java.sun.com/jsf/facelets"
 xmlns:h="http://java.sun.com/jsf/html"
 xmlns:f="http://java.sun.com/jsf/core"
 xmlns:a4j="http://richfaces.org/a4j"
 xmlns:rich="http://richfaces.org/rich"&gt;
 &lt;head&gt;
 &lt;meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /&gt;
 &lt;/head&gt;

 &lt;a4j:keepAlive beanName="rascunhoMB" /&gt;

 &lt;ui:composition template="/template/template.xhtml"&gt;
 &lt;ui:define name="corpo"&gt;
 &lt;h:form&gt;
 &lt;rich:messages /&gt;

 &lt;fieldset&gt;
 &lt;legend&gt;Rascunho&lt;/legend&gt;
 &lt;h:panelGrid columns="1"&gt;
 &lt;h:outputLabel for="titulo" value="Título "/&gt;
 &lt;h:inputText id="titulo" value="#{rascunhoMB.rascunho.titulo }" required="true" requiredMessage="Preencha o Título do Rascunho" styleClass="edit" size="35" /&gt;

 &lt;h:outputLabel for="conteudo" value="Conteúdo "  /&gt;
 &lt;rich:editor id="conteudo" theme="advanced" value="#{rascunhoMB.rascunho.conteudo}" required="true" requiredMessage="Preencha o Conteúdo do Rascunho" height="300" width="700"/&gt;
 &lt;/h:panelGrid&gt;

 &lt;a4j:commandButton value="Salvar " action="#{rascunhoMB.save}" styleClass="botoes"/&gt;
 &lt;h:commandButton value="Voltar " action="toIndex" immediate="true" styleClass="botoes"/&gt;
 &lt;/fieldset&gt;
 &lt;/h:form&gt;
 &lt;/ui:define&gt;
 &lt;/ui:composition&gt;
&lt;/html&gt;</pre>
</blockquote>
<p><strong>rascunho.xhtml: </strong></p>
<blockquote>
<pre>&lt;?xml version="1.0" encoding="ISO-8859-1"?&gt;
&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;
&lt;html xmlns="http://www.w3.org/1999/xhtml"
 xmlns:ui="http://java.sun.com/jsf/facelets"
 xmlns:h="http://java.sun.com/jsf/html"
 xmlns:f="http://java.sun.com/jsf/core"
 xmlns:a4j="http://richfaces.org/a4j"
 xmlns:rich="http://richfaces.org/rich"&gt;
 &lt;head&gt;
 &lt;meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /&gt;
 &lt;/head&gt;

 &lt;a4j:keepAlive beanName="rascunhoMB" /&gt;

 &lt;ui:composition template="/template/template.xhtml"&gt;
 &lt;ui:define name="corpo"&gt;
 &lt;h:form&gt;
 &lt;rich:messages /&gt;

 &lt;fieldset&gt;
 &lt;legend&gt;Rascunho&lt;/legend&gt;
 &lt;h:panelGrid columns="2"&gt;
 &lt;h:outputLabel for="titulo" value="Título "  /&gt;
 &lt;h:outputLabel id="titulo" readonly="true" value="#{rascunhoMB.rascunho.titulo}" style=" width : 254px;"/&gt;

 &lt;h:outputLabel for="data" value="Data "  /&gt;
 &lt;h:outputLabel id="data" readonly="true" value="#{rascunhoMB.rascunho.data}" style=" width : 254px;"&gt;
 &lt;f:convertDateTime pattern="dd/MM/yyyy" /&gt;
 &lt;/h:outputLabel&gt;
 &lt;/h:panelGrid&gt;    

 &lt;h:panelGrid columns="1"&gt;
 &lt;rich:editor theme="advanced" autoResize="true" value="#{rascunhoMB.rascunho.conteudo}" height="300" width="822" readonly="true"/&gt;
 &lt;/h:panelGrid&gt;                

 &lt;a4j:commandButton value="Salvar " action="#{rascunhoMB.save}" styleClass="botoes"/&gt;
 &lt;h:commandButton value="Voltar " action="toGerenciaRascunhos" immediate="true" styleClass="botoes"/&gt;
 &lt;/fieldset&gt;
 &lt;/h:form&gt;
 &lt;/ui:define&gt;
 &lt;/ui:composition&gt;
&lt;/html&gt;</pre>
</blockquote>
<h2><span style="color:#888888;">Importando o projeto</span></h2>
<ol>
<li><span style="color:#000000;">Baixe o projeto completo &gt;&gt;<a href="http://www.4shared.com/file/132691995/170230d9/rich_editor_facelets.html">aqui</a>&lt;&lt;;</span></li>
<li><span style="color:#000000;">Descompacte o projeto no seu <em>workspace</em>;</span></li>
<li><span style="color:#000000;">No Eclipse vá em: File –&gt; Import –&gt; General – Existing Projects into Workspace –&gt; Next –&gt; Selecione o projeto descompactado no workspace –&gt; Finish.</span></li>
</ol>
<h2><span style="color:#888888;">Criando o banco de dados</span></h2>
<ol>
<li><span style="color:#000000;">Com o MySQL instalado e configurado com usuário: <strong>root</strong> e senha: <strong>root</strong> crie um novo schema com o nome de <strong><em>jsf</em></strong>.</span></li>
<li><span style="color:#000000;">Execute a classe <em>br.com.serjaum.util.<strong>GerarTabelas.java. </strong>E</em>ssa classe criará as tabelas que foram mapeadas no arquivo <em>hibernate.cfg.xml</em>, no caso a classe <strong>Rascunho</strong> terá uma tabela correspondente com o nome de <strong>rascunho</strong> no nosso banco de dados.</span></li>
</ol>
<h2><span style="color:#888888;">Resultado</span></h2>
<p style="text-align:center;"><span style="color:#888888;"><img class="aligncenter size-full wp-image-853" title="resultado1" src="http://serjaum.files.wordpress.com/2009/09/resultado11.png?w=622&#038;h=521" alt="resultado1" width="622" height="521" /></span></p>
<p style="text-align:center;"><span style="color:#888888;"><img class="aligncenter size-full wp-image-854" title="resultado2" src="http://serjaum.files.wordpress.com/2009/09/resultado21.png?w=622&#038;h=521" alt="resultado2" width="622" height="521" /></span></p>
<p style="text-align:center;"><span style="color:#888888;"><br />
</span></p>
<p style="text-align:left;"><span style="color:#888888;"><span style="color:#000000;">Até o próximo post!</span><br />
</span></p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/serjaum.wordpress.com/838/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/serjaum.wordpress.com/838/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/serjaum.wordpress.com/838/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/serjaum.wordpress.com/838/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/serjaum.wordpress.com/838/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/serjaum.wordpress.com/838/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/serjaum.wordpress.com/838/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/serjaum.wordpress.com/838/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/serjaum.wordpress.com/838/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/serjaum.wordpress.com/838/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=serjaum.wordpress.com&blog=3927959&post=838&subd=serjaum&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://serjaum.wordpress.com/2009/09/15/jsf-aplicacao-pratica-utilizando-richeditor/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b984204ba36d6d9166522dd067649282?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">serjaumfantin</media:title>
		</media:content>

		<media:content url="http://serjaum.files.wordpress.com/2009/09/rich_editor.png" medium="image">
			<media:title type="html">rich_editor</media:title>
		</media:content>

		<media:content url="http://serjaum.files.wordpress.com/2009/09/resultado11.png" medium="image">
			<media:title type="html">resultado1</media:title>
		</media:content>

		<media:content url="http://serjaum.files.wordpress.com/2009/09/resultado21.png" medium="image">
			<media:title type="html">resultado2</media:title>
		</media:content>
	</item>
		<item>
		<title>JSF &#8211; Migrando CRUD para Facelets</title>
		<link>http://serjaum.wordpress.com/2009/09/03/jsf-migrando-crud-para-facelets/</link>
		<comments>http://serjaum.wordpress.com/2009/09/03/jsf-migrando-crud-para-facelets/#comments</comments>
		<pubDate>Thu, 03 Sep 2009 02:54:12 +0000</pubDate>
		<dc:creator>serjaumfantin</dc:creator>
				<category><![CDATA[Facelets]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[Hibernate]]></category>
		<category><![CDATA[JSF]]></category>
		<category><![CDATA[JUnit]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://serjaum.wordpress.com/?p=819</guid>
		<description><![CDATA[Neste post irei fazer a migração da nossa aplicação JSF completa utilizando RichFaces + Hibernate + MySQL na prática para Facelets. 
Algumas das características do Facelets: 

Utilização do XHTML como camada de visão da aplicação;

Permite a criação de componentes reutilizáveis;

Aumenta a performance da aplicação de 30% até 50% comparado com JSP, pois não usa a [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=serjaum.wordpress.com&blog=3927959&post=819&subd=serjaum&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p><span style="color:#000000;">Neste post irei fazer a migração da </span><span style="color:#000000;"><a href="http://serjaum.wordpress.com/2009/08/27/jsf-%E2%80%93-tutorial-richfaces-hibernate-mysql-%E2%80%93-crud-completo-parte-final/">nossa aplicação JSF completa</a> utilizando <a href="http://www.jboss.org/jbossrichfaces/">RichFaces</a> + <a href="https://www.hibernate.org/">Hibernate</a> + <a href="http://www.mysql.com/">MySQL</a> na prática</span><span style="color:#000000;"> para <a href="https://facelets.dev.java.net/">Facelets</a>. </span></p>
<p><span style="color:#000000;">Algumas das características do Facelets: </span></p>
<ul>
<li><span style="color:#000000;">Utilização do XHTML como camada de visão da aplicação;
<p></span></li>
<li><span style="color:#000000;">Permite a criação de componentes reutilizáveis;
<p></span></li>
<li><span style="color:#000000;">Aumenta a performance da aplicação de 30% até 50% comparado com JSP, pois não usa a compilação para servlet;</span></li>
<li><span style="color:#000000;">Criação simplificada de templates;
<p></span></li>
<li><span style="color:#000000;">Uso de código JSF em tags HTML com o atributo <em>jsfc </em>(não é muito recomendado)</span><span style="color:#000000;">;</span></li>
<li><span style="color:#000000;">Camada de visão padrão para o JSF 2.0;
<p></span></li>
</ul>
<p><span style="color:#000000;">Mais informações <a href="https://facelets.dev.java.net/nonav/docs/dev/docbook.html#intro">&gt;&gt;aqui&lt;&lt;</a>.</span></p>
<h2>Versões utilizadas</h2>
<ul>
<li><span style="color:#000000;">Eclipse 3.4.1</span></li>
<li><span style="color:#000000;">JDK 1.6</span></li>
<li><span style="color:#000000;">Tomcat 6.0.18</span></li>
<li><span style="color:#000000;">MyFaces 1.2.5</span></li>
<li><span style="color:#000000;">RichFaces 3.3.1</span></li>
<li><span style="color:#000000;">Hibernate Annotations 3.4.0</span></li>
<li><span style="color:#000000;">Hibernate 3.3.1</span></li>
<li><span style="color:#000000;">MySQL 5</span></li>
<li><span style="color:#000000;">JUnit 4.5</span></li>
<li><span style="color:#000000;">Caelum Stella 1.2</span></li>
</ul>
<h2>Estrutura do projeto</h2>
<p style="text-align:center;"><img class="aligncenter size-full wp-image-820" title="crud_facelets" src="http://serjaum.files.wordpress.com/2009/09/crud_facelets.png?w=285&#038;h=627" alt="crud_facelets" width="285" height="627" /></p>
<p><span id="more-819"></span></p>
<h2>Códigos</h2>
<p><strong>atualizaPessoa.xhtml: </strong></p>
<blockquote>
<pre>&lt;?xml version="1.0" encoding="UTF-8" ?&gt;
&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;
&lt;html xmlns="http://www.w3.org/1999/xhtml"
 xmlns:ui="http://java.sun.com/jsf/facelets"
 xmlns:h="http://java.sun.com/jsf/html"
 xmlns:f="http://java.sun.com/jsf/core"
 xmlns:a4j="http://richfaces.org/a4j"
 xmlns:stella="http://stella.caelum.com.br/faces"
 xmlns:rich="http://richfaces.org/rich"&gt;
 &lt;head&gt;
 &lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /&gt;
 &lt;/head&gt;

 &lt;a4j:keepAlive beanName="pessoaMB" /&gt;

 &lt;ui:composition template="/template/template.xhtml"&gt;
 &lt;ui:define name="corpo"&gt;
 &lt;h:form&gt;
 &lt;rich:messages /&gt;

 &lt;fieldset&gt;&lt;legend&gt;Atualização de Dados&lt;/legend&gt; 

 &lt;rich:dataTable value="#{pessoaMB.pessoas}" var="fisica" rows="10" id="fisicas" width="100%" cellspacing="0" cellpadding="0" border="1"&gt;
 &lt;h:column&gt;
 &lt;f:facet name="header"&gt;
 &lt;h:outputText value="NOME" /&gt;
 &lt;/f:facet&gt;
 &lt;h:outputText value="#{fisica.nome}" /&gt;
 &lt;/h:column&gt;

 &lt;h:column&gt;
 &lt;f:facet name="header"&gt;
 &lt;h:outputText value="E-MAIL" /&gt;
 &lt;/f:facet&gt;
 &lt;h:outputText value="#{fisica.email}" /&gt;
 &lt;/h:column&gt;

 &lt;h:column&gt;
 &lt;f:facet name="header"&gt;
 &lt;h:outputText value="CPF" /&gt;
 &lt;/f:facet&gt;
 &lt;h:outputText value="#{fisica.cpf}" /&gt;
 &lt;/h:column&gt;

 &lt;h:column&gt;
 &lt;f:facet name="header"&gt;
 &lt;h:outputText value="DATA NASC." /&gt;
 &lt;/f:facet&gt;
 &lt;h:outputText value="#{fisica.dataNascimento}"&gt;
 &lt;f:convertDateTime pattern="dd/MM/yyyy" /&gt;
 &lt;/h:outputText&gt;
 &lt;/h:column&gt;

 &lt;h:column&gt;
 &lt;f:facet name="header"&gt;
 &lt;h:outputText value="CELULAR" /&gt;
 &lt;/f:facet&gt;
 &lt;h:outputText value="#{fisica.telefoneCelular}" /&gt;
 &lt;/h:column&gt;

 &lt;h:column&gt;
 &lt;f:facet name="header"&gt;
 &lt;h:outputText value="Exclusão"/&gt;
 &lt;/f:facet&gt;

 &lt;a4j:commandLink reRender="panelGridInputs"&gt;
 &lt;h:outputText value="Selecionar"/&gt;
 &lt;f:setPropertyActionListener  value="#{fisica}" target="#{pessoaMB.pessoa}"/&gt;
 &lt;/a4j:commandLink&gt;

 &lt;/h:column&gt;

 &lt;f:facet name="footer"&gt;
 &lt;rich:datascroller /&gt;
 &lt;/f:facet&gt;
 &lt;/rich:dataTable&gt;

 &lt;rich:messages/&gt;

 &lt;a4j:region id="regiaoAjax"&gt;
 &lt;a4j:status id="sts"&gt;
 &lt;f:facet name="start"&gt;
 &lt;h:graphicImage value="/images/ajax-loader.gif" /&gt;
 &lt;/f:facet&gt;
 &lt;/a4j:status&gt;
 &lt;/a4j:region&gt;

 &lt;h:panelGrid columns="2" id="panelGridInputs"&gt;
 &lt;h:outputLabel for="nome" value="Nome "  /&gt;
 &lt;h:inputText id="nome" value="#{pessoaMB.pessoa.nome}" style=" width : 254px;"/&gt;

 &lt;h:outputLabel for="email" value="E-mail "  /&gt;
 &lt;h:inputText id="email" value="#{pessoaMB.pessoa.email}" style=" width : 249px;"&gt;
 &lt;f:validator validatorId="emailValidator"/&gt;
 &lt;/h:inputText&gt;

 &lt;h:outputLabel for="cpf" value="CPF "  /&gt;
 &lt;h:inputText id="cpf" validatorMessage="CPF inválido!" value="#{pessoaMB.pessoa.cpf}" size="60" style=" width : 106px;"&gt;
 &lt;rich:jQuery selector="#cpf" query="mask('999.999.999-99')" timing="onload"/&gt;
 &lt;stella:validateCPF formatted="true"/&gt;
 &lt;/h:inputText&gt;

 &lt;h:outputLabel for="senha" value="Senha "  /&gt;
 &lt;h:inputSecret id="senha" value="#{pessoaMB.pessoa.senha}" size="30"/&gt;

 &lt;h:outputLabel for="dataNasc" value="Data Nascimento: "  /&gt;
 &lt;h:inputText id="dataNasc" validatorMessage="Data de nascimento com formato inválido!" value="#{pessoaMB.pessoa.dataNascimento}" size="60" style=" width : 75px;"&gt;
 &lt;f:convertDateTime pattern="dd/MM/yyyy" /&gt;
 &lt;rich:jQuery selector="#dataNasc" query="mask('99/99/9999')" timing="onload"/&gt;
 &lt;/h:inputText&gt; 

 &lt;h:outputLabel for="telCel" value="Tel. Celular "  /&gt;
 &lt;h:inputText id="telCel" value="#{pessoaMB.pessoa.telefoneCelular}"&gt;
 &lt;rich:jQuery selector="#telCel" query="mask('(99) 9999-9999')" timing="onload"/&gt;
 &lt;/h:inputText&gt;

 &lt;a4j:commandButton value="Atualizar" action="#{pessoaMB.merge}" styleClass="botoes" status="sts" reRender="fisicas"/&gt;
 &lt;a4j:commandButton value="Voltar" immediate="true" action="toIndex" styleClass="botoes"/&gt;
 &lt;/h:panelGrid&gt;
 &lt;/fieldset&gt;
 &lt;/h:form&gt;
 &lt;/ui:define&gt;
 &lt;/ui:composition&gt;
&lt;/html&gt;</pre>
</blockquote>
<p><strong>cadastraPessoa.xhtml:</strong></p>
<blockquote>
<pre>&lt;?xml version="1.0" encoding="UTF-8" ?&gt;
&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;
&lt;html xmlns="http://www.w3.org/1999/xhtml"
 xmlns:ui="http://java.sun.com/jsf/facelets"
 xmlns:h="http://java.sun.com/jsf/html"
 xmlns:f="http://java.sun.com/jsf/core"
 xmlns:a4j="http://richfaces.org/a4j"
 xmlns:stella="http://stella.caelum.com.br/faces"
 xmlns:rich="http://richfaces.org/rich"&gt;
 &lt;head&gt;
 &lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /&gt;
 &lt;/head&gt;

 &lt;a4j:keepAlive beanName="pessoaMB" /&gt;

 &lt;ui:composition template="/template/template.xhtml"&gt;
 &lt;ui:define name="corpo"&gt;
 &lt;h:form&gt;
 &lt;rich:messages /&gt;

 &lt;fieldset&gt;
 &lt;legend&gt;Cadastro de Pessoa&lt;/legend&gt;
 &lt;a4j:region id="regiaoAjax"&gt;
 &lt;a4j:status id="sts"&gt;
 &lt;f:facet name="start"&gt;
 &lt;h:graphicImage value="/images/ajax-loader.gif" /&gt;
 &lt;/f:facet&gt;
 &lt;/a4j:status&gt;
 &lt;/a4j:region&gt;

 &lt;h:panelGrid columns="2" id="inputs"&gt;
 &lt;h:outputLabel for="nome" value="Nome "  /&gt;
 &lt;h:inputText id="nome" value="#{pessoaMB.pessoa.nome}" styleClass="edit" size="40" /&gt;

 &lt;h:outputLabel for="email" value="E-mail "  /&gt;
 &lt;h:inputText id="email" value="#{pessoaMB.pessoa.email}" required="true" requiredMessage="Campo e-mail obrigatório!" styleClass="edit" size="30"&gt;
 &lt;f:validator validatorId="emailValidator"/&gt;
 &lt;/h:inputText&gt;

 &lt;h:outputLabel for="senha" value="Senha "  /&gt;
 &lt;h:inputSecret id="senha" value="#{pessoaMB.pessoa.senha}" required="true" requiredMessage="Campo senha obrigatório!" styleClass="edit" size="30"/&gt;

 &lt;h:outputLabel for="cpf" value="CPF "  /&gt;
 &lt;h:inputText id="cpf" value="#{pessoaMB.pessoa.cpf}" styleClass="edit" size="11"&gt;
 &lt;rich:jQuery selector="#cpf" query="mask('999.999.999-99')" timing="onload"/&gt;
 &lt;stella:validateCPF formatted="true"/&gt;
 &lt;/h:inputText&gt;

 &lt;h:outputLabel for="dataNasc" value="Data Nascimento "  /&gt;
 &lt;h:inputText id="dataNasc" validatorMessage="Data de nascimento com formato inválido!" value="#{pessoaMB.pessoa.dataNascimento}" styleClass="edit" size="10" &gt;
 &lt;f:convertDateTime pattern="dd/MM/yyyy" /&gt;
 &lt;rich:jQuery selector="#dataNasc" query="mask('99/99/9999')" timing="onload"/&gt;
 &lt;/h:inputText&gt;

 &lt;h:outputLabel for="telCel" value="Tel. Celular "  /&gt;
 &lt;h:inputText id="telCel" value="#{pessoaMB.pessoa.telefoneCelular}" styleClass="edit" size="10"&gt;
 &lt;rich:jQuery selector="#telCel" query="mask('(99) 9999-9999')" timing="onload"/&gt;
 &lt;/h:inputText&gt;

 &lt;a4j:commandButton value="Inserir" action="#{pessoaMB.save}" status="sts" reRender="inputs" styleClass="botoes"/&gt;
 &lt;a4j:commandButton value="Voltar" immediate="true" action="toIndex" styleClass="botoes"/&gt;
 &lt;/h:panelGrid&gt;
 &lt;/fieldset&gt;
 &lt;/h:form&gt;
 &lt;/ui:define&gt;
 &lt;/ui:composition&gt;
&lt;/html&gt;</pre>
</blockquote>
<p><strong>pesquisaPessoa.xhtml:</strong></p>
<blockquote>
<pre>&lt;?xml version="1.0" encoding="UTF-8" ?&gt;
&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;
&lt;html xmlns="http://www.w3.org/1999/xhtml"
 xmlns:ui="http://java.sun.com/jsf/facelets"
 xmlns:h="http://java.sun.com/jsf/html"
 xmlns:f="http://java.sun.com/jsf/core"
 xmlns:a4j="http://richfaces.org/a4j"
 xmlns:stella="http://stella.caelum.com.br/faces"
 xmlns:rich="http://richfaces.org/rich"&gt;
 &lt;head&gt;
 &lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /&gt;
 &lt;/head&gt;

 &lt;a4j:keepAlive beanName="pessoaMB" /&gt;

 &lt;ui:composition template="/template/template.xhtml"&gt;
 &lt;ui:define name="corpo"&gt;
 &lt;h:form&gt;
 &lt;rich:messages /&gt;

 &lt;fieldset&gt;
 &lt;legend&gt;Pesquisa de Pessoas&lt;/legend&gt;
 &lt;h:panelGrid columns="2"&gt;

 &lt;h:outputLabel for="nomeLabel" value="Digite o nome: " /&gt;
 &lt;h:inputText id="nomeInput" value="#{pessoaMB.pessoa.nome}" style=" width : 321px;" /&gt;

 &lt;h:commandButton value="Pesquisar" action="#{pessoaMB.pesquisaByNome}" styleClass="botoes"/&gt;
 &lt;h:commandButton value="Voltar" immediate="true" action="toIndex" styleClass="botoes"/&gt;
 &lt;/h:panelGrid&gt;

 &lt;h:panelGrid columns="2" id="panelGridInputs"&gt;
 &lt;h:outputLabel for="nome" value="Nome "  /&gt;
 &lt;h:inputText id="nome" readonly="true" value="#{pessoaMB.pessoa.nome}" style=" width : 254px;"/&gt;

 &lt;h:outputLabel for="email" value="E-mail "  /&gt;
 &lt;h:inputText id="email" readonly="true" value="#{pessoaMB.pessoa.email}" style=" width : 249px;"/&gt;

 &lt;h:outputLabel for="cpf" value="CPF "  /&gt;
 &lt;h:inputText id="cpf" readonly="true" validatorMessage="CPF inválido!" value="#{pessoaMB.pessoa.cpf}" size="60" style=" width : 106px;"/&gt;

 &lt;h:outputLabel for="dataNasc" value="Data Nascimento: "  /&gt;
 &lt;h:inputText id="dataNasc" readonly="true" validatorMessage="Data de nascimento com formato inválido!" value="#{pessoaMB.pessoa.dataNascimento}" size="60" style=" width : 75px;"&gt;
 &lt;f:convertDateTime pattern="dd/MM/yyyy" /&gt;
 &lt;/h:inputText&gt; 

 &lt;h:outputLabel for="telCel" value="Tel. Celular "  /&gt;
 &lt;h:inputText id="telCel" readonly="true" value="#{pessoaMB.pessoa.telefoneCelular}" /&gt;
 &lt;/h:panelGrid&gt;
 &lt;/fieldset&gt;
 &lt;/h:form&gt;
 &lt;/ui:define&gt;
 &lt;/ui:composition&gt;
&lt;/html&gt;</pre>
</blockquote>
<p><strong>removePessoa.xhtml</strong></p>
<blockquote>
<pre>&lt;?xml version="1.0" encoding="UTF-8" ?&gt;
&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;
&lt;html xmlns="http://www.w3.org/1999/xhtml"
 xmlns:ui="http://java.sun.com/jsf/facelets"
 xmlns:h="http://java.sun.com/jsf/html"
 xmlns:f="http://java.sun.com/jsf/core"
 xmlns:a4j="http://richfaces.org/a4j"
 xmlns:stella="http://stella.caelum.com.br/faces"
 xmlns:rich="http://richfaces.org/rich"&gt;
 &lt;head&gt;
 &lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /&gt;
 &lt;/head&gt;

 &lt;a4j:keepAlive beanName="pessoaMB" /&gt;

 &lt;ui:composition template="/template/template.xhtml"&gt;
 &lt;ui:define name="corpo"&gt;
 &lt;h:form&gt;
 &lt;rich:messages /&gt;
 &lt;fieldset&gt;&lt;legend&gt;Remoção de Pessoas&lt;/legend&gt;
 &lt;rich:dataTable value="#{pessoaMB.pessoas}" var="fisica" rows="10" id="fisicas" width="100%" cellspacing="0" cellpadding="0" border="1"&gt;
 &lt;h:column&gt;
 &lt;f:facet name="header"&gt;
 &lt;h:outputText value="NOME" /&gt;
 &lt;/f:facet&gt;
 &lt;h:outputText value="#{fisica.nome}" /&gt;
 &lt;/h:column&gt;

 &lt;h:column&gt;
 &lt;f:facet name="header"&gt;
 &lt;h:outputText value="E-MAIL" /&gt;
 &lt;/f:facet&gt;
 &lt;h:outputText value="#{fisica.email}" /&gt;
 &lt;/h:column&gt;

 &lt;h:column&gt;
 &lt;f:facet name="header"&gt;
 &lt;h:outputText value="CPF" /&gt;
 &lt;/f:facet&gt;
 &lt;h:outputText value="#{fisica.cpf}" /&gt;
 &lt;/h:column&gt;

 &lt;h:column&gt;
 &lt;f:facet name="header"&gt;
 &lt;h:outputText value="DATA NASC." /&gt;
 &lt;/f:facet&gt;
 &lt;h:outputText value="#{fisica.dataNascimento}"&gt;
 &lt;f:convertDateTime pattern="dd/MM/yyyy" /&gt;
 &lt;/h:outputText&gt;
 &lt;/h:column&gt;

 &lt;h:column&gt;
 &lt;f:facet name="header"&gt;
 &lt;h:outputText value="CELULAR" /&gt;
 &lt;/f:facet&gt;
 &lt;h:outputText value="#{fisica.telefoneCelular}" /&gt;
 &lt;/h:column&gt;

 &lt;h:column&gt;
 &lt;f:facet name="header"&gt;
 &lt;h:outputText value="Exclusão"/&gt;
 &lt;/f:facet&gt;

 &lt;a4j:commandLink action="#{pessoaMB.delete}" status="sts" reRender="fisicas" &gt;
 &lt;h:outputText value="Excluir"/&gt;
 &lt;f:setPropertyActionListener value="#{fisica.id}" target="#{pessoaMB.id}" /&gt;
 &lt;/a4j:commandLink&gt;
 &lt;/h:column&gt;

 &lt;f:facet name="footer"&gt;
 &lt;rich:datascroller /&gt;
 &lt;/f:facet&gt;
 &lt;/rich:dataTable&gt;

 &lt;a4j:region id="regiaoAjax"&gt;
 &lt;a4j:status id="sts"&gt;
 &lt;f:facet name="start"&gt;
 &lt;h:graphicImage value="/images/ajax-loader.gif" /&gt;
 &lt;/f:facet&gt;
 &lt;/a4j:status&gt;
 &lt;/a4j:region&gt;

 &lt;h:commandButton value="Voltar" immediate="true" action="toIndex" styleClass="botoes"/&gt;
 &lt;/fieldset&gt;
 &lt;/h:form&gt;
 &lt;/ui:define&gt;
 &lt;/ui:composition&gt;
&lt;/html&gt;</pre>
</blockquote>
<p><strong>login.xhtml:</strong></p>
<blockquote>
<pre>&lt;?xml version="1.0" encoding="UTF-8" ?&gt;
&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;
&lt;html xmlns="http://www.w3.org/1999/xhtml"
 xmlns:ui="http://java.sun.com/jsf/facelets"
 xmlns:h="http://java.sun.com/jsf/html"
 xmlns:f="http://java.sun.com/jsf/core"
 xmlns:a4j="http://richfaces.org/a4j"
 xmlns:stella="http://stella.caelum.com.br/faces"
 xmlns:rich="http://richfaces.org/rich"&gt;
 &lt;head&gt;
 &lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /&gt;
 &lt;/head&gt;

 &lt;a4j:keepAlive beanName="pessoaMB" /&gt;

 &lt;ui:composition template="/template/template.xhtml"&gt;
 &lt;ui:define name="corpo"&gt;
 &lt;h:form&gt;
 &lt;rich:messages /&gt;
 &lt;fieldset&gt;
 &lt;h:panelGrid columns="2"&gt;
 &lt;h:outputText value="E-mail" styleClass="rotulos" /&gt;
 &lt;h:inputText id="email" value="#{pessoaMB.pessoa.email}" styleClass="edit" size="25"&gt;
 &lt;f:validator validatorId="emailValidator" /&gt;
 &lt;/h:inputText&gt;    

 &lt;h:outputLabel for="senha" value="Senha" styleClass="rotulos"/&gt;
 &lt;h:inputSecret id="senha" styleClass="edit" validatorMessage="A senha deve ter no mínimo 6 caracteres!" value="#{pessoaMB.pessoa.senha}" size="25"&gt;
 &lt;f:validateLength minimum="6"/&gt;
 &lt;/h:inputSecret&gt;
 &lt;h:commandButton id="botao" value="Entrar" action="#{pessoaMB.login}" /&gt;
 &lt;/h:panelGrid&gt;
 &lt;/fieldset&gt;
 &lt;/h:form&gt;
 &lt;/ui:define&gt;
 &lt;/ui:composition&gt;
&lt;/html&gt;</pre>
</blockquote>
<p><strong>template.xhtml:</strong></p>
<blockquote>
<pre>&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;
&lt;html xmlns="http://www.w3.org/1999/xhtml"
 xmlns:ui="http://java.sun.com/jsf/facelets"
 xmlns:h="http://java.sun.com/jsf/html"
 xmlns:f="http://java.sun.com/jsf/core"
 xmlns:a4j="http://richfaces.org/a4j"
 xmlns:stella="http://stella.caelum.com.br/faces"
 xmlns:rich="http://richfaces.org/rich"&gt;

&lt;head&gt;
 &lt;link rel="StyleSheet" type="text/css" href="/jsf/style/estilos.css" media="screen" /&gt;
 &lt;script type="text/javascript" src="/jsf/resources/jquery.maskedinput-1.2.1.js"&gt;&lt;/script&gt;

 &lt;title&gt;
 &lt;ui:insert name="pageTitle"&gt;
 &lt;h:outputText value="CRUD Facelets "/&gt;
 &lt;/ui:insert&gt;
 &lt;/title&gt;
&lt;/head&gt;

&lt;body&gt;
 &lt;div id="topo"&gt;
 &lt;ui:insert name="topo"&gt;
 Topo do CRUD Facelets
 &lt;/ui:insert&gt;
 &lt;/div&gt;

 &lt;div id="corpo"&gt;
 &lt;ui:insert name="corpo"&gt;
 Conteúdo
 &lt;/ui:insert&gt;
 &lt;/div&gt;

 &lt;div id="rodape"&gt;
 &lt;ui:insert name="rodape"&gt;
 &lt;hr/&gt;
 Rodapé CRUD Facelets
 &lt;/ui:insert&gt;
 &lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
</blockquote>
<p><strong>web.xml:</strong></p>
<blockquote>
<pre>&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&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"&gt;
 &lt;display-name&gt;crud_facelets&lt;/display-name&gt;
 &lt;welcome-file-list&gt;
 &lt;welcome-file&gt;index.html&lt;/welcome-file&gt;
 &lt;welcome-file&gt;index.htm&lt;/welcome-file&gt;
 &lt;welcome-file&gt;index.jsp&lt;/welcome-file&gt;
 &lt;/welcome-file-list&gt;
 &lt;context-param&gt;
 &lt;param-name&gt;javax.faces.DEFAULT_SUFFIX &lt;/param-name&gt;
 &lt;param-value&gt;.xhtml &lt;/param-value&gt;
&lt;/context-param&gt;
&lt;context-param&gt;
 &lt;param-name&gt;facelets.DEVELOPMENT &lt;/param-name&gt;
 &lt;param-value&gt;true &lt;/param-value&gt;
&lt;/context-param&gt;
&lt;context-param&gt;
 &lt;param-name&gt;com.sun.faces.validateXml &lt;/param-name&gt;
 &lt;param-value&gt;false &lt;/param-value&gt;
&lt;/context-param&gt;
 &lt;context-param&gt;
 &lt;param-name&gt;com.sun.faces.verifyObjects &lt;/param-name&gt;
 &lt;param-value&gt;true &lt;/param-value&gt;
&lt;/context-param&gt;
 &lt;servlet&gt;
 &lt;servlet-name&gt;Faces Servlet&lt;/servlet-name&gt;
 &lt;servlet-class&gt;javax.faces.webapp.FacesServlet&lt;/servlet-class&gt;
 &lt;load-on-startup&gt;1&lt;/load-on-startup&gt;
 &lt;/servlet&gt;
 &lt;servlet-mapping&gt;
 &lt;servlet-name&gt;Faces Servlet&lt;/servlet-name&gt;
 &lt;url-pattern&gt;*.jsf&lt;/url-pattern&gt;
 &lt;url-pattern&gt;*.faces&lt;/url-pattern&gt;
 &lt;/servlet-mapping&gt;

 &lt;context-param&gt;
 &lt;param-name&gt;org.ajax4jsf.SKIN&lt;/param-name&gt;
 &lt;param-value&gt;blueSky&lt;/param-value&gt;
 &lt;/context-param&gt;
 &lt;filter&gt;
 &lt;display-name&gt;Ajax4jsf Filter&lt;/display-name&gt;
 &lt;filter-name&gt;ajax4jsf&lt;/filter-name&gt;
 &lt;filter-class&gt;org.ajax4jsf.Filter&lt;/filter-class&gt;
 &lt;/filter&gt;
 &lt;filter-mapping&gt;
 &lt;filter-name&gt;ajax4jsf&lt;/filter-name&gt;
 &lt;servlet-name&gt;Faces Servlet&lt;/servlet-name&gt;
 &lt;dispatcher&gt;REQUEST&lt;/dispatcher&gt;
 &lt;dispatcher&gt;FORWARD&lt;/dispatcher&gt;
 &lt;dispatcher&gt;INCLUDE&lt;/dispatcher&gt;
 &lt;/filter-mapping&gt;

 &lt;filter&gt;
 &lt;display-name&gt;AuthFilter&lt;/display-name&gt;
 &lt;filter-name&gt;AuthFilter&lt;/filter-name&gt;
 &lt;filter-class&gt;br.com.serjaum.filtro.AuthFilter&lt;/filter-class&gt;
 &lt;/filter&gt;
 &lt;filter-mapping&gt;
 &lt;filter-name&gt;AuthFilter&lt;/filter-name&gt;
 &lt;url-pattern&gt;/*&lt;/url-pattern&gt;
 &lt;/filter-mapping&gt;

 &lt;context-param&gt;
 &lt;param-name&gt;facelets.SKIP_COMMENTS&lt;/param-name&gt;
 &lt;param-value&gt;true&lt;/param-value&gt;
 &lt;/context-param&gt;
&lt;/web-app&gt;</pre>
</blockquote>
<h2><span style="color:#888888;">Importando o projeto</span></h2>
<ol>
<li><span style="color:#000000;">Baixe o projeto completo &gt;&gt;<a href="http://www.4shared.com/file/129956073/8efb0e4/crud_facelets.html">aqui</a>&lt;&lt;;</span></li>
<li><span style="color:#000000;">Descompacte o projeto no seu <em>workspace</em>;</span></li>
<li><span style="color:#000000;">No Eclipse vá em: File –&gt; Import –&gt; General – Existing Projects into Workspace –&gt; Next –&gt; Selecione o projeto descompactado no workspace –&gt; Finish.</span></li>
</ol>
<h2><span style="color:#888888;">Criando o banco de dados</span></h2>
<ol>
<li><span style="color:#000000;">Com o MySQL instalado e configurado com usuário: <strong>root</strong> e senha: <strong>root</strong> crie um novo schema com o nome de <strong><em>jsf</em></strong>.</span></li>
<li><span style="color:#000000;">Execute a classe <em>br.com.serjaum.util.<strong>GerarTabelas.java. </strong>E</em>ssa classe criará as tabelas que foram mapeadas no arquivo <em>hibernate.cfg.xml</em>, no caso a classe <strong><em>Pessoa</em></strong> terá uma tabela correspondente com o nome de <strong><em>pessoa</em></strong> no nosso banco de dados.</span></li>
</ol>
<h2><span style="color:#888888;">Resultado</span></h2>
<p style="text-align:center;"><span style="color:#888888;"><img class="aligncenter size-full wp-image-829" title="resultado_facelets" src="http://serjaum.files.wordpress.com/2009/09/resultado_facelets1.png?w=617&#038;h=497" alt="resultado_facelets" width="617" height="497" /></span></p>
<p><span style="color:#888888;"> </span></p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/serjaum.wordpress.com/819/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/serjaum.wordpress.com/819/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/serjaum.wordpress.com/819/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/serjaum.wordpress.com/819/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/serjaum.wordpress.com/819/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/serjaum.wordpress.com/819/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/serjaum.wordpress.com/819/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/serjaum.wordpress.com/819/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/serjaum.wordpress.com/819/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/serjaum.wordpress.com/819/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=serjaum.wordpress.com&blog=3927959&post=819&subd=serjaum&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://serjaum.wordpress.com/2009/09/03/jsf-migrando-crud-para-facelets/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b984204ba36d6d9166522dd067649282?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">serjaumfantin</media:title>
		</media:content>

		<media:content url="http://serjaum.files.wordpress.com/2009/09/crud_facelets.png" medium="image">
			<media:title type="html">crud_facelets</media:title>
		</media:content>

		<media:content url="http://serjaum.files.wordpress.com/2009/09/resultado_facelets1.png" medium="image">
			<media:title type="html">resultado_facelets</media:title>
		</media:content>
	</item>
		<item>
		<title>JSF &#8211; Criptografia de senhas com MD5</title>
		<link>http://serjaum.wordpress.com/2009/08/31/jsf-criptografia-de-senhas-com-md5/</link>
		<comments>http://serjaum.wordpress.com/2009/08/31/jsf-criptografia-de-senhas-com-md5/#comments</comments>
		<pubDate>Mon, 31 Aug 2009 20:32:08 +0000</pubDate>
		<dc:creator>serjaumfantin</dc:creator>
				<category><![CDATA[Framework]]></category>
		<category><![CDATA[JSF]]></category>
		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://serjaum.wordpress.com/?p=807</guid>
		<description><![CDATA[Neste post irei mostrar um exemplo prático de criptografia MD5 para aplicações JSF. 
A API Java implementa dois algoritmos de Message Digest: o MD5 e o SHA-1. O algoritmo MD5 é um algoritmo de hash de 128 bits unidirecional, por isso ele não pode ser transformado na mesma string que foi usada para gerar o [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=serjaum.wordpress.com&blog=3927959&post=807&subd=serjaum&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p><span style="color:#000000;">Neste post irei mostrar um exemplo prático de criptografia <a href="http://en.wikipedia.org/wiki/MD5">MD5</a> para aplicações JSF. </span></p>
<p><span style="color:#000000;">A API Java implementa dois algoritmos de Message Digest: o MD5 e o SHA-1. O algoritmo MD5 é um algoritmo de hash de 128 bits unidirecional, por isso ele não pode ser transformado na mesma string que foi usada para gerar o código criptografado. Utilizarei a classe <a href="http://java.sun.com/j2se/1.4.2/docs/api/java/security/MessageDigest.html">java.security.MessageDigest</a> para implementar a aplicação proposta.<br />
</span></p>
<h2>Estrutura do projeto</h2>
<p style="text-align:center;"><img class="aligncenter size-full wp-image-808" title="md5_estrutura" src="http://serjaum.files.wordpress.com/2009/08/md5_estrutura.png?w=262&#038;h=370" alt="md5_estrutura" width="262" height="370" /></p>
<h2>Versões utilizadas</h2>
<ul>
<li><span style="color:#000000;">Eclipse 3.5.0</span></li>
<li><span style="color:#000000;">JDK 1.6</span></li>
<li><span style="color:#000000;"> </span></li>
<li><span style="color:#000000;">MyFaces 1.2.5</span></li>
<li><span style="color:#000000;">RichFaces 3.3.1</span></li>
</ul>
<h2>Códigos</h2>
<p><strong>TransformaStringMD5</strong><strong>.java: </strong></p>
<blockquote>
<pre>package br.com.serjaum.util;

import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class TransformaStringMD5 {

 public static String md5(String senha) {
 String sen = "";
 MessageDigest md = null;
 try {
 md = MessageDigest.getInstance("MD5");
 } catch (NoSuchAlgorithmException e) {
 e.printStackTrace();
 }
 BigInteger hash = new BigInteger(1, md.digest(senha.getBytes()));
 sen = hash.toString(16);
 return sen;
 }
}</pre>
</blockquote>
<p><span id="more-807"></span><strong>Pessoa</strong><strong>.java: </strong></p>
<blockquote>
<pre>package br.com.serjaum.entidades;

public class Pessoa {

 private String senha;

 public String getSenha() {
 return senha;
 }

 public void setSenha(String senha) {
 this.senha = senha;
 }

}</pre>
</blockquote>
<p><strong>PessoaMB</strong><strong>.java: </strong></p>
<blockquote>
<pre>package br.com.serjaum.mb;

import br.com.serjaum.entidades.Pessoa;
import br.com.serjaum.util.TransformaStringMD5;

public class PessoaMB {
 private Pessoa pessoa = new Pessoa();

 private String senhaCriptografada; 

 public String actionCriptografa(){
 this.senhaCriptografada = TransformaStringMD5.md5(this.pessoa.getSenha());

 return "sucesso";
 }

 public Pessoa getPessoa() {
 return pessoa;
 }

 public void setPessoa(Pessoa pessoa) {
 this.pessoa = pessoa;
 }

 public String getSenhaCriptografada() {
 return senhaCriptografada;
 }

 public void setSenhaCriptografada(String senhaCriptografada) {
 this.senhaCriptografada = senhaCriptografada;
 } 

}</pre>
</blockquote>
<p><strong>pagina.jsp</strong><strong>: </strong></p>
<blockquote>
<pre>&lt;%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%&gt;
&lt;%@ taglib prefix="f" uri="http://java.sun.com/jsf/core"%&gt;
&lt;%@ taglib prefix="h" uri="http://java.sun.com/jsf/html"%&gt;
&lt;%@ taglib prefix="rich" uri="http://richfaces.ajax4jsf.org/rich"%&gt;
&lt;%@ taglib prefix="a4j" uri="http://richfaces.org/a4j"%&gt;

&lt;!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"&gt;
&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8"&gt;
&lt;title&gt;Página JSF&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;f:view&gt;
 &lt;h:form&gt;
 &lt;fieldset&gt;
 &lt;legend&gt;Criptografia MD5&lt;/legend&gt; 

 &lt;a4j:region id="regiaoAjax"&gt;
 &lt;a4j:status id="sts"&gt;
 &lt;f:facet name="start"&gt;
 &lt;h:graphicImage value="/images/ajax-loader.gif" /&gt;
 &lt;/f:facet&gt;
 &lt;/a4j:status&gt;
 &lt;/a4j:region&gt;

 &lt;a4j:outputPanel id="painel" ajaxRendered="true"&gt;
 &lt;h:panelGrid columns="2"&gt;
 &lt;h:outputLabel for="senha" value="Senha " /&gt;
 &lt;h:inputText id="senha" value="#{pessoaMB.pessoa.senha}" size="30"&gt;
 &lt;a4j:support event="onblur" action="#{pessoaMB.actionCriptografa}" ajaxSingle="true" status="sts" reRender="senhaCripto"/&gt;
 &lt;/h:inputText&gt;

 &lt;h:outputLabel for="senhaCripto" value="Senha Criptografada " /&gt;
 &lt;h:inputText id="senhaCripto" value="#{pessoaMB.senhaCriptografada}" size="30" /&gt;
 &lt;/h:panelGrid&gt;
 &lt;/a4j:outputPanel&gt;
 &lt;/fieldset&gt;
 &lt;/h:form&gt;
&lt;/f:view&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
</blockquote>
<h2>Importando o projeto</h2>
<ol>
<li><span style="color:#000000;">Baixe o projeto atualizado &gt;&gt;</span><a href="http://www.4shared.com/file/129172203/5ddbb417/jsf_md5.html">aqui</a><span style="color:#000000;">&lt;&lt;;</span></li>
<li><span style="color:#000000;">Descompacte o projeto no seu <em>workspace</em>;</span></li>
<li><span style="color:#000000;">No Eclipse vá em: File –&gt; Import –&gt; General – Existing Projects into Workspace –&gt; Next –&gt; Selecione o projeto descompactado no workspace –&gt; Finish.</span></li>
</ol>
<h2>Executando o projeto</h2>
<ol>
<li><span style="color:#000000;">Execute o arquivo <em>pagina.jsp; </em></span></li>
</ol>
<h2>Resultado</h2>
<p style="text-align:center;"><img class="aligncenter size-full wp-image-810" title="md5_resultado" src="http://serjaum.files.wordpress.com/2009/08/md5_resultado.png?w=616&#038;h=495" alt="md5_resultado" width="616" height="495" /></p>
<p style="text-align:left;"><span style="color:#000000;">Até o próximo post!</span></p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/serjaum.wordpress.com/807/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/serjaum.wordpress.com/807/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/serjaum.wordpress.com/807/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/serjaum.wordpress.com/807/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/serjaum.wordpress.com/807/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/serjaum.wordpress.com/807/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/serjaum.wordpress.com/807/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/serjaum.wordpress.com/807/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/serjaum.wordpress.com/807/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/serjaum.wordpress.com/807/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=serjaum.wordpress.com&blog=3927959&post=807&subd=serjaum&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://serjaum.wordpress.com/2009/08/31/jsf-criptografia-de-senhas-com-md5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b984204ba36d6d9166522dd067649282?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">serjaumfantin</media:title>
		</media:content>

		<media:content url="http://serjaum.files.wordpress.com/2009/08/md5_estrutura.png" medium="image">
			<media:title type="html">md5_estrutura</media:title>
		</media:content>

		<media:content url="http://serjaum.files.wordpress.com/2009/08/md5_resultado.png" medium="image">
			<media:title type="html">md5_resultado</media:title>
		</media:content>
	</item>
		<item>
		<title>JSF &#8211; Tutorial combos aninhados Estados/Cidades</title>
		<link>http://serjaum.wordpress.com/2009/08/28/jsf-tutorial-combos-aninhados-estadoscidades/</link>
		<comments>http://serjaum.wordpress.com/2009/08/28/jsf-tutorial-combos-aninhados-estadoscidades/#comments</comments>
		<pubDate>Fri, 28 Aug 2009 14:50:24 +0000</pubDate>
		<dc:creator>serjaumfantin</dc:creator>
				<category><![CDATA[Framework]]></category>
		<category><![CDATA[Hibernate]]></category>
		<category><![CDATA[JSF]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://serjaum.wordpress.com/?p=741</guid>
		<description><![CDATA[Neste post irei mostrar uma das implementações de combos aninhados estados/cidades. Percebi nas listas e fóruns que esse é um problema comum, onde desenvolvedores se deparam frequentemente.
Utilizarei Tomcat, Hibernate e MySQL para a persistência de dados e disponilizarei o projeto para download com o script sql contendo a lista completa de estados/cidades brasileiras.
Para gerenciar as [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=serjaum.wordpress.com&blog=3927959&post=741&subd=serjaum&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Neste post irei mostrar uma das implementações de combos aninhados estados/cidades. Percebi nas listas e fóruns que esse é um problema comum, onde desenvolvedores se deparam frequentemente.</p>
<p>Utilizarei <a href="http://tomcat.apache.org/">Tomcat</a>, <a href="https://www.hibernate.org/">Hibernate</a> e <a href="http://www.mysql.com/">MySQL</a> para a persistência de dados e disponilizarei o projeto para download com o script sql contendo a lista completa de estados/cidades brasileiras.</p>
<p>Para gerenciar as sessões/transações do Hibernate criei um serlvet filter <span style="color:#000000;"><a href="https://www.hibernate.org/43.html">Open Session In View</a></span> fazendo papel de um interceptador, que será executado a cada request e response.</p>
<h2>Estrutura do projeto</h2>
<p style="text-align:center;"><img class="aligncenter size-full wp-image-750" title="estrutura_combos" src="http://serjaum.files.wordpress.com/2009/08/estrutura_combos.png?w=295&#038;h=554" alt="estrutura_combos" width="295" height="554" /></p>
<h2>Versões utilizadas</h2>
<ul>
<li><span style="color:#000000;">Eclipse 3.4.1</span></li>
<li><span style="color:#000000;">JDK 1.6</span></li>
<li><span style="color:#000000;">Tomcat 6.0.18</span></li>
<li><span style="color:#000000;">MyFaces 1.2.5</span></li>
<li><span style="color:#000000;">RichFaces 3.3.1</span></li>
<li><span style="color:#000000;">Hibernate Annotations 3.4.0</span></li>
<li><span style="color:#000000;">Hibernate 3.3.1</span></li>
<li><span style="color:#000000;">MySQL 5</span></li>
<li><span style="color:#000000;">MySQL Query Browser 1.2</span></li>
</ul>
<h2>Códigos</h2>
<p><strong>Estado.java: </strong></p>
<blockquote>
<pre>package br.com.serjaum.modelo;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;

import org.hibernate.annotations.Cascade;

@Entity
@Table(name="estados")
public class Estado implements Serializable {

 private static final long serialVersionUID = -5582648910303813488L;

 @Id
 @GeneratedValue(strategy=GenerationType.IDENTITY)
 @Column(name="ESTADO_ID")
 private Long id;

 @Column(name="sigla")
 private String sigla; 

 @Column(name="nome")
 private String nome; 

 @OneToMany(mappedBy="estado", fetch=FetchType.LAZY)
 @Cascade(org.hibernate.annotations.CascadeType.ALL)
 private List&lt;Cidade&gt; cidades = new ArrayList&lt;Cidade&gt;();

 public Long getId() {
 return id;
 }

 public void setId(Long id) {
 this.id = id;
 }

 public String getNome() {
 return nome;
 }

 public void setNome(String nome) {
 this.nome = nome;
 }

 public String getSigla() {
 return sigla;
 }

 public void setSigla(String sigla) {
 this.sigla = sigla;
 }

 public List&lt;Cidade&gt; getCidades() {
 return cidades;
 }

 public void setCidades(List&lt;Cidade&gt; cidades) {
 this.cidades = cidades;
 }

 public String toString() {
 return this.nome;
 }

 @Override
 public boolean equals(Object obj){
 if( (obj instanceof Estado) &amp;&amp; ( ((Estado)obj).getNome().equals(this.nome))){
 return true;
 }else {
 return false;
 }
 }

 public int hashCode(){
 return this.nome.length() * 23;
 }

}</pre>
</blockquote>
<p><strong>Cidade.java: </strong></p>
<blockquote>
<pre>package br.com.serjaum.modelo;

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

@Entity
@Table(name="cidades")
public class Cidade implements Serializable{

 private static final long serialVersionUID = -2094704997130038211L;

 @Id
 @GeneratedValue(strategy=GenerationType.IDENTITY)
 @Column(name="CIDADE_ID")
 private Long id;

 @Column(name="nome")
 private String nome;

 @ManyToOne(cascade=javax.persistence.CascadeType.ALL)
 @JoinColumn(name="id_cid_est")
 private Estado estado;

 public Long getId() {
 return id;
 }

 public void setId(Long id) {
 this.id = id;
 }

 public String getNome() {
 return nome;
 }

 public void setNome(String nome) {
 this.nome = nome;
 }

 public Estado getEstado() {
 return estado;
 }

 public void setEstado(Estado estado) {
 this.estado = estado;
 }

 public String toString() {
 return this.nome;
 }

 @Override
 public boolean equals(Object obj){
 if( (obj instanceof Cidade) &amp;&amp; ( ((Cidade)obj).getNome().equals(this.nome))){
 return true;
 }else {
 return false;
 }
 }

 public int hashCode(){
 return this.nome.length() * 23;
 }
}</pre>
</blockquote>
<p><span id="more-741"></span><br />
<strong>HibernateSessionFilter.java: </strong></p>
<blockquote>
<pre>package br.com.serjaum.filtro; 

import java.io.IOException; 

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse; 

import br.com.serjaum.dao.HibernateUtil; 

public class HibernateSessionFilter implements Filter { 

 public void doFilter(ServletRequest req, ServletResponse res, FilterChain fc) throws IOException, ServletException {
 HibernateUtil.openSession();
 try {
 HibernateUtil.currentSession().beginTransaction();
 fc.doFilter(req, res);
 HibernateUtil.currentSession().getTransaction().commit();
 } catch (Exception e) {
 HibernateUtil.currentSession().getTransaction().rollback();
 throw new ServletException(e);
 } finally {
 HibernateUtil.closeCurrentSession();
 }
 } 

 public void init(FilterConfig c) { 

 } 

 public void destroy() { 

 }
}</pre>
</blockquote>
<p><strong>combo.jsp: </strong></p>
<blockquote>
<pre>&lt;%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%&gt;
&lt;%@ taglib prefix="f" uri="http://java.sun.com/jsf/core"%&gt;
&lt;%@ taglib prefix="h" uri="http://java.sun.com/jsf/html"%&gt;
&lt;%@ taglib prefix="rich" uri="http://richfaces.ajax4jsf.org/rich"%&gt;
&lt;%@ taglib prefix="a4j" uri="http://richfaces.org/a4j"%&gt;

&lt;!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"&gt;
&lt;html&gt;
&lt;head&gt;
 &lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8"&gt;
&lt;/head&gt;

&lt;body&gt;
&lt;f:view&gt;
 &lt;h:form&gt;
 &lt;h:panelGrid columns="2"&gt;
 &lt;h:outputLabel for="estado" value="Estado " /&gt;
 &lt;h:selectOneMenu id="estado" value="#{regiaoMB.estado.id}"&gt;
 &lt;f:selectItem itemValue="" itemLabel="Selecione..." /&gt;
 &lt;f:selectItems value="#{regiaoMB.estados}" /&gt;
 &lt;a4j:support event="onchange" ajaxSingle="true" action="#{regiaoMB.actionCarregaCidades}" reRender="estado,cidade"/&gt;
 &lt;/h:selectOneMenu&gt;

 &lt;h:outputLabel for="cidade" value="Cidade " /&gt;
 &lt;h:selectOneMenu id="cidade" value="#{regiaoMB.cidade.id}"&gt;
 &lt;f:selectItem itemValue="" itemLabel="Selecione..." /&gt;
 &lt;f:selectItems value="#{regiaoMB.cidades}" /&gt;
 &lt;/h:selectOneMenu&gt;
 &lt;/h:panelGrid&gt;
 &lt;/h:form&gt;
&lt;/f:view&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
</blockquote>
<h2>Importando o projeto</h2>
<ol>
<li><span style="color:#000000;">Baixe o projeto atualizado &gt;&gt;</span><a href="http://www.4shared.com/file/128199366/b46fbffd/jsf_combos_aninhados.html">aqui</a><span style="color:#000000;">&lt;&lt;;</span></li>
<li><span style="color:#000000;">Descompacte o projeto no seu <em>workspace</em>;</span></li>
<li><span style="color:#000000;">No Eclipse vá em: File –&gt; Import –&gt; General – Existing Projects into Workspace –&gt; Next –&gt; Selecione o projeto descompactado no workspace –&gt; Finish.</span></li>
</ol>
<h2>Executando o projeto</h2>
<ol>
<li><span style="color:#000000;">Com o MySQL instalado e configurado com usuário: <strong>root</strong> e senha: <strong>root</strong> crie um novo schema com o nome de <strong><em>jsf</em></strong>.</span></li>
<li><span style="color:#000000;">Para popular o banco de dados utilize seu cliente SQL favorito, eu particularmente gosto do <a href="http://dev.mysql.com/downloads/gui-tools/5.0.html">MySQL Query Browser</a>. Abra o <em>script.sql</em> que pode ser encontrado no pacote <em>br.com.serjaum.sql</em> e execute-o.</span></li>
<li><span style="color:#000000;">Execute o arquivo <em>combo.jsp; </em><br />
</span></li>
</ol>
<p><span style="color:#000000;"> </span></p>
<h2>Resultado</h2>
<p style="text-align:center;"><img class="aligncenter size-full wp-image-752" title="combos" src="http://serjaum.files.wordpress.com/2009/08/combos.png?w=429&#038;h=123" alt="combos" width="429" height="123" /></p>
<p style="text-align:left;"><span style="color:#000000;">Espero ter ajudado!</span></p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/serjaum.wordpress.com/741/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/serjaum.wordpress.com/741/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/serjaum.wordpress.com/741/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/serjaum.wordpress.com/741/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/serjaum.wordpress.com/741/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/serjaum.wordpress.com/741/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/serjaum.wordpress.com/741/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/serjaum.wordpress.com/741/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/serjaum.wordpress.com/741/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/serjaum.wordpress.com/741/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=serjaum.wordpress.com&blog=3927959&post=741&subd=serjaum&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://serjaum.wordpress.com/2009/08/28/jsf-tutorial-combos-aninhados-estadoscidades/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b984204ba36d6d9166522dd067649282?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">serjaumfantin</media:title>
		</media:content>

		<media:content url="http://serjaum.files.wordpress.com/2009/08/estrutura_combos.png" medium="image">
			<media:title type="html">estrutura_combos</media:title>
		</media:content>

		<media:content url="http://serjaum.files.wordpress.com/2009/08/combos.png" medium="image">
			<media:title type="html">combos</media:title>
		</media:content>
	</item>
		<item>
		<title>JSF – Tutorial RichFaces + Hibernate + MySQL – CRUD completo (Parte Final)</title>
		<link>http://serjaum.wordpress.com/2009/08/27/jsf-%e2%80%93-tutorial-richfaces-hibernate-mysql-%e2%80%93-crud-completo-parte-final/</link>
		<comments>http://serjaum.wordpress.com/2009/08/27/jsf-%e2%80%93-tutorial-richfaces-hibernate-mysql-%e2%80%93-crud-completo-parte-final/#comments</comments>
		<pubDate>Thu, 27 Aug 2009 20:12:35 +0000</pubDate>
		<dc:creator>serjaumfantin</dc:creator>
				<category><![CDATA[Framework]]></category>
		<category><![CDATA[Hibernate]]></category>
		<category><![CDATA[JSF]]></category>
		<category><![CDATA[JUnit]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://serjaum.wordpress.com/?p=783</guid>
		<description><![CDATA[Este é o último post referente à nossa aplicação JSF completa utilizando RichFaces + Hibernate + MySQL na prática.
Dando continuidade ao desenvolvimento da nossa aplicação, adicionarei a parte de autenticação, pois percebi nas listas e fóruns que esse é um problema comum, onde desenvolvedores se deparam frequentemente, por não se tratar de um problema trivial.
Na [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=serjaum.wordpress.com&blog=3927959&post=783&subd=serjaum&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p style="text-align:left;"><span style="color:#000000;">Este é o último post referente à nossa aplicação JSF completa utilizando <a href="http://www.jboss.org/jbossrichfaces/">RichFaces</a> + <a href="https://www.hibernate.org/">Hibernate</a> + <a href="http://www.mysql.com/">MySQL</a> na prática.</span></p>
<p><span style="color:#000000;">Dando continuidade ao desenvolvimento da nossa aplicação, adicionarei a parte de autenticação, pois percebi nas listas e fóruns que esse é um problema comum, onde desenvolvedores se deparam frequentemente, por não se tratar de um problema trivial.</span></p>
<p><span style="color:#000000;">Na implementação usarei um <a href="http://java.sun.com/products/servlet/Filters.html">Servlet Filter</a> fazendo papel de um interceptador, que será executado a cada request e response. Ele verificará se o usuário pode se logar no sistema, caso contrário redirecionará o mesmo para uma página de login.</span></p>
<h2>Estrutura do projeto</h2>
<p style="text-align:center;"><img class="aligncenter size-full wp-image-784" title="estrutura_final" src="http://serjaum.files.wordpress.com/2009/08/estrutura_final.png?w=258&#038;h=628" alt="estrutura_final" width="258" height="628" /></p>
<h2>Códigos</h2>
<p><strong>AuthFilter</strong><strong>.jsp:</strong></p>
<blockquote>
<pre>package br.com.serjaum.filtro;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class AuthFilter implements Filter {

 public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
 HttpServletRequest rq = (HttpServletRequest) request;
 HttpServletResponse rp = (HttpServletResponse) response;
 boolean auth = rq.getSession().getAttribute("user") != null;

 if (!auth &amp;&amp; !rq.getRequestURL().toString().contains("login.jsf")) {
 rp.sendRedirect(rq.getContextPath() + "/pages/login/login.jsf");
 } else {

 try {
 chain.doFilter(request, response);
 } catch (Exception e) {
 e.printStackTrace();
 }
 }
 }    

 public void destroy() {

 }

 public void init(FilterConfig config) throws ServletException {

 }
}</pre>
</blockquote>
<p><span id="more-783"></span></p>
<p><strong>PessoaMB.jsp (trecho relevante):</strong></p>
<blockquote>
<pre>public class PessoaMB implements Serializable {

 private static final long serialVersionUID = -333995781063775201L;

 private Pessoa pessoa = new Pessoa();

 private Long id;

 public PessoaMB(){
 System.out.println(" &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Contrutor do PESSOA_MB &lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;");

 if(this.pessoa == null){
 this.pessoa = new Pessoa();
 }
 }

 public String login() throws Exception{
 boolean logado = false;
 HttpSession session = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(false);
 HttpServletResponse rp = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();
 HttpServletRequest rq = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
 PessoaFacade pessoaService = new PessoaFacadeImpl();

 logado = pessoaService.autentica(this.pessoa.getEmail(), this.pessoa.getSenha());

 if(logado){
 session.setAttribute("user", logado);
 rp.sendRedirect(rq.getContextPath() + "/pages/index.jsf");
 return "success";
 }else{
 session.setAttribute("user", null);
 session.removeAttribute("user");
 rp.sendRedirect(rq.getContextPath() + "/pages/login/login.jsf");
 return "failure";
 }
 }

 public String logout() {
 HttpServletRequest rq = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
 HttpServletResponse rp = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();
 FacesContext facesContext = FacesContext.getCurrentInstance();
 HttpSession session = (HttpSession) facesContext.getExternalContext().getSession(false);
 session.invalidate();
 try {
 rp.sendRedirect(rq.getContextPath() + "/pages/login/login.jsf");
 } catch (IOException e) {
 e.printStackTrace();
 }

 return "logoutOk";
 }
 ...</pre>
</blockquote>
<p><strong>PessoaFacadeImpl.java (trecho relevante):</strong></p>
<pre>...
public boolean autentica(String email, String senha){
 boolean autenticado; 

 sf = new AnnotationConfiguration().configure().buildSessionFactory();
 session = sf.openSession();
 tx = session.beginTransaction();
 pessoaDAO = new PessoaDAO(session, Pessoa.class);

 autenticado = this.pessoaDAO.verificaEmailSenha(email, senha);

 tx.commit();
 session.close();

 return autenticado;
 }
...</pre>
<p><strong>PessoaDAO.java (trecho relevante):</strong></p>
<blockquote>
<pre>...
public boolean verificaEmailSenha(String email, String senha){
 boolean valid = false;

 System.out.println("DAO metodo isValidLoginAndPassword...");
 System.out.println("DAO session.isOpen() &gt;&gt;&gt; " + session.isOpen());

 Query query = session.createQuery("from Pessoa p where p.email = :em and p.senha = :sen");
 query.setString("em", email);
 query.setString("sen", senha);

 Pessoa pessoa = (Pessoa) query.uniqueResult();

 if(pessoa != null){
 valid = true;
 }

 System.out.println("DAO Pessoa &gt;&gt;&gt; " + pessoa);

 return valid;
 }
...</pre>
</blockquote>
<p><strong>login.jsp:</strong></p>
<blockquote>
<pre>&lt;%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%&gt;
&lt;%@ taglib prefix="f" uri="http://java.sun.com/jsf/core"%&gt;
&lt;%@ taglib prefix="h" uri="http://java.sun.com/jsf/html"%&gt;
&lt;%@ taglib prefix="rich" uri="http://richfaces.ajax4jsf.org/rich"%&gt;
&lt;%@ taglib prefix="a4j" uri="http://richfaces.org/a4j"%&gt;

&lt;!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"&gt;
&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8"&gt;
&lt;link rel="StyleSheet" type="text/css" href="/jsf/style/estilos.css" media="screen" /&gt;
&lt;script type="text/javascript" src="/jsf/resources/jquery.maskedinput-1.2.1.js"&gt;&lt;/script&gt;
&lt;/head&gt;

&lt;body&gt;
&lt;f:view&gt;
 &lt;h:form&gt;
 &lt;rich:messages /&gt;
 &lt;fieldset&gt;
 &lt;h:panelGrid columns="2"&gt;
 &lt;h:outputText value="E-mail" styleClass="rotulos" /&gt;
 &lt;h:inputText id="email" value="#{pessoaMB.pessoa.email}" styleClass="edit" size="90" style=" width : 150px;"&gt;
 &lt;f:validator validatorId="emailValidator" /&gt;
 &lt;/h:inputText&gt;    

 &lt;h:outputLabel for="senha" value="Senha" styleClass="rotulos"/&gt;
 &lt;h:inputSecret id="senha" styleClass="edit" validatorMessage="A senha deve ter no mínimo 6 caracteres!" value="#{pessoaMB.pessoa.senha}" size="60" style=" width : 150px;"&gt;
 &lt;f:validateLength minimum="6"/&gt;
 &lt;/h:inputSecret&gt;

 &lt;a4j:commandButton id="botao" value="Entrar" action="#{pessoaMB.login}" /&gt;
 &lt;/h:panelGrid&gt;
 &lt;/fieldset&gt;
 &lt;/h:form&gt;
&lt;/f:view&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
</blockquote>
<p><strong>web.xml (trecho relevante):</strong></p>
<blockquote>
<pre>...
 &lt;filter&gt;
 &lt;display-name&gt;AuthFilter&lt;/display-name&gt;
 &lt;filter-name&gt;AuthFilter&lt;/filter-name&gt;
 &lt;filter-class&gt;br.com.serjaum.filtro.AuthFilter&lt;/filter-class&gt;
 &lt;/filter&gt;
 &lt;filter-mapping&gt;
 &lt;filter-name&gt;AuthFilter&lt;/filter-name&gt;
 &lt;url-pattern&gt;/*&lt;/url-pattern&gt;
 &lt;/filter-mapping&gt;
...</pre>
</blockquote>
<h2><span style="color:#888888;">Importando o projeto</span></h2>
<ol>
<li><span style="color:#000000;">Baixe o projeto completo &gt;&gt;<a href="http://www.4shared.com/file/128638741/f03daf7c/jsf_parte_final.html">aqui</a>&lt;&lt;;</span></li>
<li><span style="color:#000000;">Descompacte o projeto no seu <em>workspace</em>;</span></li>
<li><span style="color:#000000;">No Eclipse vá em: File –&gt; Import –&gt; General – Existing Projects into Workspace –&gt; Next –&gt; Selecione o projeto descompactado no workspace –&gt; Finish.</span></li>
</ol>
<h2><span style="color:#888888;">Criando o banco de dados</span></h2>
<ol>
<li><span style="color:#000000;">Com o MySQL instalado e configurado com usuário: <strong>root</strong> e senha: <strong>root</strong> crie um novo schema com o nome de <strong><em>jsf</em></strong>.</span></li>
<li><span style="color:#000000;">Execute a classe <em>br.com.serjaum.util.<strong>GerarTabelas.java. </strong>E</em>ssa classe criará as tabelas que foram mapeadas no arquivo <em>hibernate.cfg.xml</em>, no caso a classe <strong><em>Pessoa</em></strong> terá uma tabela correspondente com o nome de <strong><em>pessoa</em></strong> no nosso banco de dados.</span></li>
</ol>
<h2><span style="color:#888888;">Resultado</span></h2>
<p style="text-align:center;"><span style="color:#888888;"><img class="aligncenter size-full wp-image-786" title="login" src="http://serjaum.files.wordpress.com/2009/08/login.png?w=614&#038;h=493" alt="login" width="614" height="493" /></span></p>
<p style="text-align:left;"><span style="color:#000000;">Espero ter ajudado!<br />
</span></p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/serjaum.wordpress.com/783/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/serjaum.wordpress.com/783/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/serjaum.wordpress.com/783/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/serjaum.wordpress.com/783/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/serjaum.wordpress.com/783/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/serjaum.wordpress.com/783/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/serjaum.wordpress.com/783/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/serjaum.wordpress.com/783/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/serjaum.wordpress.com/783/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/serjaum.wordpress.com/783/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=serjaum.wordpress.com&blog=3927959&post=783&subd=serjaum&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://serjaum.wordpress.com/2009/08/27/jsf-%e2%80%93-tutorial-richfaces-hibernate-mysql-%e2%80%93-crud-completo-parte-final/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b984204ba36d6d9166522dd067649282?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">serjaumfantin</media:title>
		</media:content>

		<media:content url="http://serjaum.files.wordpress.com/2009/08/estrutura_final.png" medium="image">
			<media:title type="html">estrutura_final</media:title>
		</media:content>

		<media:content url="http://serjaum.files.wordpress.com/2009/08/login.png" medium="image">
			<media:title type="html">login</media:title>
		</media:content>
	</item>
		<item>
		<title>JSF – Tutorial RichFaces + Hibernate + MySQL – CRUD completo (parte 5)</title>
		<link>http://serjaum.wordpress.com/2009/08/25/jsf-%e2%80%93-tutorial-richfaces-hibernate-mysql-%e2%80%93-crud-completo-parte-5/</link>
		<comments>http://serjaum.wordpress.com/2009/08/25/jsf-%e2%80%93-tutorial-richfaces-hibernate-mysql-%e2%80%93-crud-completo-parte-5/#comments</comments>
		<pubDate>Tue, 25 Aug 2009 15:31:34 +0000</pubDate>
		<dc:creator>serjaumfantin</dc:creator>
				<category><![CDATA[Framework]]></category>
		<category><![CDATA[Hibernate]]></category>
		<category><![CDATA[JSF]]></category>
		<category><![CDATA[JUnit]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://serjaum.wordpress.com/?p=710</guid>
		<description><![CDATA[Este é o quinto post referente à nossa aplicação JSF completa utilizando RichFaces + Hibernate + MySQL na prática.
Dando continuidade ao desenvolvimento da parte visual da nossa aplicação, adicionarei as regras de navegação, CSS, máscaras para os campos, validadores, conversores e Ajax. 
Estrutura do projeto
Códigos
index.jsp:

&#60;%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%&#62;
&#60;%@ taglib prefix="f" uri="http://java.sun.com/jsf/core"%&#62;
&#60;%@ taglib prefix="h" [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=serjaum.wordpress.com&blog=3927959&post=710&subd=serjaum&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p style="text-align:left;"><span style="color:#000000;">Este é o quinto post referente à nossa aplicação JSF completa utilizando <a href="http://www.jboss.org/jbossrichfaces/">RichFaces</a> + <a href="https://www.hibernate.org/">Hibernate</a> + <a href="http://www.mysql.com/">MySQL</a> na prática.</span></p>
<p><span style="color:#000000;">Dando continuidade ao desenvolvimento da parte visual da nossa aplicação, adicionarei as regras de navegação, C</span><span style="color:#000000;">SS, máscaras para os campos, validadores, co</span><span style="color:#000000;">nversores e Ajax. </span></p>
<h2>Estrutura do projeto<span style="color:#000000;"><img class="aligncenter size-full wp-image-711" title="estrutura_parte5" src="http://serjaum.files.wordpress.com/2009/08/estrutura_parte5.png?w=220&#038;h=370" alt="estrutura_parte5" width="220" height="370" /></span></h2>
<h2>Códigos</h2>
<p><strong>index.jsp:</strong></p>
<blockquote>
<pre>&lt;%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%&gt;
&lt;%@ taglib prefix="f" uri="http://java.sun.com/jsf/core"%&gt;
&lt;%@ taglib prefix="h" uri="http://java.sun.com/jsf/html"%&gt;

&lt;!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"&gt;
&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8"&gt;
&lt;link rel="StyleSheet" type="text/css" href="/jsf/style/estilos.css" media="screen" /&gt;
&lt;script type="text/javascript" src="/jsf/resources/jquery.maskedinput-1.2.1.js"&gt;&lt;/script&gt;
&lt;/head&gt;

&lt;body&gt;
&lt;f:view&gt;
 &lt;h:form&gt;
 &lt;h:messages /&gt;
 &lt;fieldset&gt;
 &lt;legend&gt;Cadastro de Pessoas Físicas&lt;/legend&gt;
     &lt;h:panelGrid&gt;
         &lt;h:commandLink value="Adicionar pessoa" action="toCadastraPessoa" /&gt;
         &lt;h:commandLink value="Pesquisar pessoa" action="toPesquisaPessoa" /&gt;
         &lt;h:commandLink value="Remover pessoa" action="toRemovePessoa" /&gt;
         &lt;h:commandLink value="Atualizar pessoa" action="toAtualizaPessoa" /&gt;
     &lt;/h:panelGrid&gt;
 &lt;/fieldset&gt;
 &lt;/h:form&gt;
&lt;/f:view&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
</blockquote>
<p><span id="more-710"></span></p>
<p><strong>atualizaPessoa.jsp:</strong></p>
<blockquote>
<pre>&lt;%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%&gt;
&lt;%@ taglib prefix="f" uri="http://java.sun.com/jsf/core"%&gt;
&lt;%@ taglib prefix="h" uri="http://java.sun.com/jsf/html"%&gt;
&lt;%@ taglib prefix="rich" uri="http://richfaces.ajax4jsf.org/rich"%&gt;
&lt;%@ taglib prefix="a4j" uri="http://richfaces.org/a4j"%&gt;
&lt;%@ taglib prefix="stella" uri="http://stella.caelum.com.br/faces"%&gt;

&lt;!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"&gt;
&lt;html&gt;
&lt;head&gt;
 &lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8"&gt;
 &lt;link rel="StyleSheet" type="text/css" href="/jsf/style/estilos.css" media="screen" /&gt;
 &lt;script type="text/javascript" src="/jsf/resources/jquery.maskedinput-1.2.1.js"&gt;&lt;/script&gt;
&lt;/head&gt;

&lt;body&gt;
&lt;f:view&gt;
 &lt;h:form&gt;
 &lt;a4j:keepAlive beanName="pessoaMB" /&gt;
 &lt;fieldset&gt;&lt;legend&gt;Atualização de Dados&lt;/legend&gt; 

 &lt;rich:dataTable value="#{pessoaMB.pessoas}" var="fisica" rows="10" id="fisicas"
    width="100%" cellspacing="0" cellpadding="0" border="1"&gt;
 &lt;h:column&gt;
 &lt;f:facet name="header"&gt;
 &lt;h:outputText value="NOME" /&gt;
 &lt;/f:facet&gt;
 &lt;h:outputText value="#{fisica.nome}" /&gt;
 &lt;/h:column&gt;

 &lt;h:column&gt;
 &lt;f:facet name="header"&gt;
 &lt;h:outputText value="E-MAIL" /&gt;
 &lt;/f:facet&gt;
 &lt;h:outputText value="#{fisica.email}" /&gt;
 &lt;/h:column&gt;

 &lt;h:column&gt;
 &lt;f:facet name="header"&gt;
 &lt;h:outputText value="CPF" /&gt;
 &lt;/f:facet&gt;
 &lt;h:outputText value="#{fisica.cpf}" /&gt;
 &lt;/h:column&gt;

 &lt;h:column&gt;
 &lt;f:facet name="header"&gt;
 &lt;h:outputText value="DATA NASC." /&gt;
 &lt;/f:facet&gt;
 &lt;h:outputText value="#{fisica.dataNascimento}"&gt;
 &lt;f:convertDateTime pattern="dd/MM/yyyy" /&gt;
 &lt;/h:outputText&gt;
 &lt;/h:column&gt;

 &lt;h:column&gt;
 &lt;f:facet name="header"&gt;
 &lt;h:outputText value="CELULAR" /&gt;
 &lt;/f:facet&gt;
 &lt;h:outputText value="#{fisica.telefoneCelular}" /&gt;
 &lt;/h:column&gt;

 &lt;h:column&gt;
 &lt;f:facet name="header"&gt;
 &lt;h:outputText value="Exclusão"/&gt;
 &lt;/f:facet&gt;

 &lt;a4j:commandLink reRender="panelGridInputs"&gt;
 &lt;h:outputText value="Selecionar"/&gt;
 &lt;f:setPropertyActionListener  value="#{fisica}" target="#{pessoaMB.pessoa}"/&gt;
 &lt;/a4j:commandLink&gt;

 &lt;/h:column&gt;

 &lt;f:facet name="footer"&gt;
 &lt;rich:datascroller /&gt;
 &lt;/f:facet&gt;
 &lt;/rich:dataTable&gt;

 &lt;rich:messages/&gt;

 &lt;a4j:region id="regiaoAjax"&gt;
 &lt;a4j:status id="sts"&gt;
 &lt;f:facet name="start"&gt;
 &lt;h:graphicImage value="/images/ajax-loader.gif" /&gt;
 &lt;/f:facet&gt;
 &lt;/a4j:status&gt;
 &lt;/a4j:region&gt;

 &lt;h:panelGrid columns="2" id="panelGridInputs"&gt;
 &lt;h:outputLabel for="nome" value="Nome "  /&gt;
 &lt;h:inputText id="nome" value="#{pessoaMB.pessoa.nome}" style=" width : 254px;"/&gt;

 &lt;h:outputLabel for="email" value="E-mail "  /&gt;
 &lt;h:inputText id="email" value="#{pessoaMB.pessoa.email}" style=" width : 249px;"&gt;
 &lt;f:validator validatorId="emailValidator"/&gt;
 &lt;/h:inputText&gt;

 &lt;h:outputLabel for="cpf" value="CPF "  /&gt;
 &lt;h:inputText id="cpf" validatorMessage="CPF inválido!" value="#{pessoaMB.pessoa.cpf}" size="60" style=" width : 106px;"&gt;
 &lt;rich:jQuery selector="#cpf" query="mask('999.999.999-99')" timing="onload"/&gt;
 &lt;stella:validateCPF formatted="true"/&gt;
 &lt;/h:inputText&gt;

 &lt;h:outputLabel for="dataNasc" value="Data Nascimento: "  /&gt;
 &lt;h:inputText id="dataNasc" validatorMessage="Data de nascimento com formato inválido!"
     value="#{pessoaMB.pessoa.dataNascimento}" size="60" style=" width : 75px;"&gt;
 &lt;f:convertDateTime pattern="dd/MM/yyyy" /&gt;
 &lt;rich:jQuery selector="#dataNasc" query="mask('99/99/9999')" timing="onload"/&gt;
 &lt;/h:inputText&gt; 

 &lt;h:outputLabel for="telCel" value="Tel. Celular "  /&gt;
 &lt;h:inputText id="telCel" value="#{pessoaMB.pessoa.telefoneCelular}"&gt;
 &lt;rich:jQuery selector="#telCel" query="mask('(99) 9999-9999')" timing="onload"/&gt;
 &lt;/h:inputText&gt;

 &lt;a4j:commandButton value="Atualizar" action="#{pessoaMB.merge}" styleClass="botoes" status="sts" reRender="fisicas"/&gt;
 &lt;a4j:commandButton value="Voltar" immediate="true" action="toIndex" styleClass="botoes"/&gt;
 &lt;/h:panelGrid&gt;
 &lt;/fieldset&gt;

 &lt;/h:form&gt;
&lt;/f:view&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
</blockquote>
<p><strong>cadastraPessoa.jsp:</strong></p>
<blockquote>
<pre>&lt;%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%&gt;
&lt;%@ taglib prefix="f" uri="http://java.sun.com/jsf/core"%&gt;
&lt;%@ taglib prefix="h" uri="http://java.sun.com/jsf/html"%&gt;
&lt;%@ taglib prefix="rich" uri="http://richfaces.ajax4jsf.org/rich"%&gt;
&lt;%@ taglib prefix="stella" uri="http://stella.caelum.com.br/faces"%&gt;
&lt;%@ taglib prefix="a4j" uri="http://richfaces.org/a4j"%&gt;

&lt;!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"&gt;
&lt;html&gt;
&lt;head&gt;
 &lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8"&gt;
 &lt;link rel="StyleSheet" type="text/css" href="/jsf/style/estilos.css" media="screen" /&gt;
 &lt;script type="text/javascript" src="/jsf/resources/jquery.maskedinput-1.2.1.js"&gt;&lt;/script&gt;
&lt;/head&gt;

&lt;body&gt;
&lt;f:view&gt;
 &lt;h:form&gt;
 &lt;rich:messages/&gt;

 &lt;fieldset&gt;
 &lt;legend&gt;Cadastro de Pessoa&lt;/legend&gt;
 &lt;a4j:region id="regiaoAjax"&gt;
 &lt;a4j:status id="sts"&gt;
 &lt;f:facet name="start"&gt;
 &lt;h:graphicImage value="/images/ajax-loader.gif" /&gt;
 &lt;/f:facet&gt;
 &lt;/a4j:status&gt;
 &lt;/a4j:region&gt;

 &lt;h:panelGrid columns="2" id="inputs"&gt;
 &lt;h:outputLabel for="nome" value="Nome "  /&gt;
 &lt;h:inputText id="nome" value="#{pessoaMB.pessoa.nome}" styleClass="edit" size="40" /&gt;

 &lt;h:outputLabel for="email" value="E-mail "  /&gt;
 &lt;h:inputText id="email" value="#{pessoaMB.pessoa.email}" required="true" requiredMessage="Campo e-mail obrigatório!" styleClass="edit" size="30"&gt;
 &lt;f:validator validatorId="emailValidator"/&gt;
 &lt;/h:inputText&gt;

 &lt;h:outputLabel for="cpf" value="CPF "  /&gt;
 &lt;h:inputText id="cpf" value="#{pessoaMB.pessoa.cpf}" styleClass="edit" size="11"&gt;
 &lt;rich:jQuery selector="#cpf" query="mask('999.999.999-99')" timing="onload"/&gt;
 &lt;stella:validateCPF formatted="true"/&gt;
 &lt;/h:inputText&gt;

 &lt;h:outputLabel for="dataNasc" value="Data Nascimento "  /&gt;
 &lt;h:inputText id="dataNasc" validatorMessage="Data de nascimento com formato inválido!" value="#{pessoaMB.pessoa.dataNascimento}" styleClass="edit" size="10" &gt;
 &lt;f:convertDateTime pattern="dd/MM/yyyy" /&gt;
 &lt;rich:jQuery selector="#dataNasc" query="mask('99/99/9999')" timing="onload"/&gt;
 &lt;/h:inputText&gt;

 &lt;h:outputLabel for="telCel" value="Tel. Celular "  /&gt;
 &lt;h:inputText id="telCel" value="#{pessoaMB.pessoa.telefoneCelular}" styleClass="edit" size="10"&gt;
 &lt;rich:jQuery selector="#telCel" query="mask('(99) 9999-9999')" timing="onload"/&gt;
 &lt;/h:inputText&gt;

 &lt;a4j:commandButton value="Inserir" action="#{pessoaMB.save}" status="sts" reRender="inputs" styleClass="botoes"/&gt;
 &lt;a4j:commandButton value="Voltar" immediate="true" action="toIndex" styleClass="botoes"/&gt;
 &lt;/h:panelGrid&gt;
 &lt;/fieldset&gt;
 &lt;/h:form&gt;
&lt;/f:view&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
</blockquote>
<p><strong>pesquisaPessoa.jsp:</strong></p>
<blockquote>
<pre>&lt;%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%&gt;
&lt;%@ taglib prefix="f" uri="http://java.sun.com/jsf/core"%&gt;
&lt;%@ taglib prefix="h" uri="http://java.sun.com/jsf/html"%&gt;
&lt;%@ taglib prefix="rich" uri="http://richfaces.ajax4jsf.org/rich"%&gt;
&lt;%@ taglib prefix="a4j" uri="http://richfaces.org/a4j"%&gt;

&lt;!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"&gt;
&lt;html&gt;
&lt;head&gt;
 &lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8"&gt;
 &lt;link rel="StyleSheet" type="text/css" href="/jsf/style/estilos.css" media="screen" /&gt;
&lt;/head&gt;

&lt;body&gt;
&lt;f:view&gt;

 &lt;h:form&gt;
 &lt;a4j:keepAlive beanName="pessoaMB" /&gt;
 &lt;h:messages/&gt;

 &lt;fieldset&gt;
 &lt;legend&gt;Pesquisa de Pessoas&lt;/legend&gt;
 &lt;h:panelGrid columns="2"&gt;

 &lt;h:outputLabel for="nomeLabel" value="Digite o nome: " /&gt;
 &lt;h:inputText id="nomeInput" value="#{pessoaMB.pessoa.nome}" style=" width : 321px;" /&gt;

 &lt;h:commandButton value="Pesquisar" action="#{pessoaMB.pesquisaByNome}" styleClass="botoes"/&gt;
 &lt;h:commandButton value="Voltar" immediate="true" action="toIndex" styleClass="botoes"/&gt;
 &lt;/h:panelGrid&gt;

 &lt;h:panelGrid columns="2" id="panelGridInputs"&gt;
 &lt;h:outputLabel for="nome" value="Nome "  /&gt;
 &lt;h:inputText id="nome" readonly="true" value="#{pessoaMB.pessoa.nome}" style=" width : 254px;"/&gt;

 &lt;h:outputLabel for="email" value="E-mail "  /&gt;
 &lt;h:inputText id="email" readonly="true" value="#{pessoaMB.pessoa.email}" style=" width : 249px;"/&gt;

 &lt;h:outputLabel for="cpf" value="CPF "  /&gt;
 &lt;h:inputText id="cpf" readonly="true" validatorMessage="CPF inválido!" value="#{pessoaMB.pessoa.cpf}"
    size="60" style=" width : 106px;"/&gt;

 &lt;h:outputLabel for="dataNasc" value="Data Nascimento: "  /&gt;
 &lt;h:inputText id="dataNasc" readonly="true" validatorMessage="Data de nascimento com formato inválido!"
   value="#{pessoaMB.pessoa.dataNascimento}" size="60" style=" width : 75px;"&gt;
 &lt;f:convertDateTime pattern="dd/MM/yyyy" /&gt;
 &lt;/h:inputText&gt; 

 &lt;h:outputLabel for="telCel" value="Tel. Celular "  /&gt;
 &lt;h:inputText id="telCel" readonly="true" value="#{pessoaMB.pessoa.telefoneCelular}" /&gt;
 &lt;/h:panelGrid&gt;
 &lt;/fieldset&gt;
 &lt;/h:form&gt;
&lt;/f:view&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
</blockquote>
<p><strong>removePessoa.jsp:</strong></p>
<blockquote>
<pre>&lt;%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%&gt;
&lt;%@ taglib prefix="f" uri="http://java.sun.com/jsf/core"%&gt;
&lt;%@ taglib prefix="h" uri="http://java.sun.com/jsf/html"%&gt;
&lt;%@ taglib prefix="rich" uri="http://richfaces.ajax4jsf.org/rich"%&gt;
&lt;%@ taglib prefix="a4j" uri="http://richfaces.org/a4j"%&gt;

&lt;!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd"&gt;
&lt;html&gt;
&lt;head&gt;
 &lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8"&gt;
 &lt;link rel="StyleSheet" type="text/css" href="/jsf/style/estilos.css" media="screen" /&gt;
&lt;/head&gt;

&lt;body&gt;
&lt;f:view&gt;
 &lt;h:form&gt;
 &lt;fieldset&gt;&lt;legend&gt;Remoção de Pessoas&lt;/legend&gt;
 &lt;rich:dataTable value="#{pessoaMB.pessoas}" var="fisica" rows="10" id="fisicas"
width="100%" cellspacing="0" cellpadding="0" border="1"&gt;
 &lt;h:column&gt;
 &lt;f:facet name="header"&gt;
 &lt;h:outputText value="NOME" /&gt;
 &lt;/f:facet&gt;
 &lt;h:outputText value="#{fisica.nome}" /&gt;
 &lt;/h:column&gt;

 &lt;h:column&gt;
 &lt;f:facet name="header"&gt;
 &lt;h:outputText value="E-MAIL" /&gt;
 &lt;/f:facet&gt;
 &lt;h:outputText value="#{fisica.email}" /&gt;
 &lt;/h:column&gt;

 &lt;h:column&gt;
 &lt;f:facet name="header"&gt;
 &lt;h:outputText value="CPF" /&gt;
 &lt;/f:facet&gt;
 &lt;h:outputText value="#{fisica.cpf}" /&gt;
 &lt;/h:column&gt;

 &lt;h:column&gt;
 &lt;f:facet name="header"&gt;
 &lt;h:outputText value="DATA NASC." /&gt;
 &lt;/f:facet&gt;
 &lt;h:outputText value="#{fisica.dataNascimento}"&gt;
 &lt;f:convertDateTime pattern="dd/MM/yyyy" /&gt;
 &lt;/h:outputText&gt;
 &lt;/h:column&gt;

 &lt;h:column&gt;
 &lt;f:facet name="header"&gt;
 &lt;h:outputText value="CELULAR" /&gt;
 &lt;/f:facet&gt;
 &lt;h:outputText value="#{fisica.telefoneCelular}" /&gt;
 &lt;/h:column&gt;

 &lt;h:column&gt;
 &lt;f:facet name="header"&gt;
 &lt;h:outputText value="Exclusão"/&gt;
 &lt;/f:facet&gt;

 &lt;a4j:commandLink action="#{pessoaMB.delete}" status="sts" reRender="fisicas" &gt;
 &lt;h:outputText value="Excluir"/&gt;
 &lt;f:setPropertyActionListener value="#{fisica.id}" target="#{pessoaMB.id}" /&gt;
 &lt;/a4j:commandLink&gt;
 &lt;/h:column&gt;

 &lt;f:facet name="footer"&gt;
 &lt;rich:datascroller /&gt;
 &lt;/f:facet&gt;
 &lt;/rich:dataTable&gt;

 &lt;a4j:region id="regiaoAjax"&gt;
 &lt;a4j:status id="sts"&gt;
 &lt;f:facet name="start"&gt;
 &lt;h:graphicImage value="/images/ajax-loader.gif" /&gt;
 &lt;/f:facet&gt;
 &lt;/a4j:status&gt;
 &lt;/a4j:region&gt;

 &lt;h:commandButton value="Voltar" immediate="true" action="toIndex" styleClass="botoes"/&gt;
 &lt;/fieldset&gt;
 &lt;/h:form&gt;
&lt;/f:view&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
</blockquote>
<h2><span style="color:#888888;">Navigation Rules</span></h2>
<p style="text-align:center;"><span style="color:#888888;"><img class="aligncenter size-full wp-image-722" title="navigationRules" src="http://serjaum.files.wordpress.com/2009/08/navigationrules1.png?w=567&#038;h=412" alt="navigationRules" width="567" height="412" /><br />
</span></p>
<h2><span style="color:#888888;">Importando o projeto</span></h2>
<ol>
<li><span style="color:#000000;">Baixe o projeto atualizado &gt;&gt;<a href="http://www.4shared.com/file/127621339/8e0f86/jsf_parte5.html">aqui</a>&lt;&lt;;</span></li>
<li><span style="color:#000000;">Descompacte o projeto no seu <em>workspace</em>;</span></li>
<li><span style="color:#000000;">No Eclipse vá em: File –&gt; Import –&gt; General – Existing Projects into Workspace –&gt; Next –&gt; Selecione o projeto descompactado no workspace –&gt; Finish.</span></li>
</ol>
<h2><span style="color:#888888;">Criando o banco de dados</span></h2>
<ol>
<li><span style="color:#000000;">Com o MySQL instalado e configurado com usuário: <strong>root</strong> e senha: <strong>root</strong> crie um novo schema com o nome de <strong><em>jsf</em></strong>.</span></li>
<li><span style="color:#000000;">Execute a classe <em>br.com.serjaum.util.<strong>GerarTabelas.java. </strong>E</em>ssa classe criará as tabelas que foram mapeadas no arquivo <em>hibernate.cfg.xml</em>, no caso a classe <strong><em>Pessoa</em></strong> terá uma tabela correspondente com o nome de <strong><em>pessoa</em></strong> no nosso banco de dados.</span></li>
</ol>
<h2><span style="color:#888888;">Resultado</span></h2>
<p style="text-align:center;"><img class="aligncenter size-full wp-image-724" title="index" src="http://serjaum.files.wordpress.com/2009/08/index.png?w=615&#038;h=497" alt="index" width="615" height="497" /><img class="aligncenter size-full wp-image-728" title="cadastraPessoa" src="http://serjaum.files.wordpress.com/2009/08/cadastrapessoa.png?w=615&#038;h=494" alt="cadastraPessoa" width="615" height="494" /><img class="aligncenter size-full wp-image-727" title="atualizaPessoa" src="http://serjaum.files.wordpress.com/2009/08/atualizapessoa.png?w=614&#038;h=497" alt="atualizaPessoa" width="614" height="497" /><img class="aligncenter size-full wp-image-726" title="pesquisaPessoa" src="http://serjaum.files.wordpress.com/2009/08/pesquisapessoa1.png?w=613&#038;h=494" alt="pesquisaPessoa" width="613" height="494" /><img class="aligncenter size-full wp-image-729" title="removePessoa" src="http://serjaum.files.wordpress.com/2009/08/removepessoa.png?w=614&#038;h=495" alt="removePessoa" width="614" height="495" /></p>
<p><span style="color:#000000;">Espero ter ajudado!<br />
</span></p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/serjaum.wordpress.com/710/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/serjaum.wordpress.com/710/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/serjaum.wordpress.com/710/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/serjaum.wordpress.com/710/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/serjaum.wordpress.com/710/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/serjaum.wordpress.com/710/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/serjaum.wordpress.com/710/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/serjaum.wordpress.com/710/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/serjaum.wordpress.com/710/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/serjaum.wordpress.com/710/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=serjaum.wordpress.com&blog=3927959&post=710&subd=serjaum&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://serjaum.wordpress.com/2009/08/25/jsf-%e2%80%93-tutorial-richfaces-hibernate-mysql-%e2%80%93-crud-completo-parte-5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b984204ba36d6d9166522dd067649282?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">serjaumfantin</media:title>
		</media:content>

		<media:content url="http://serjaum.files.wordpress.com/2009/08/estrutura_parte5.png" medium="image">
			<media:title type="html">estrutura_parte5</media:title>
		</media:content>

		<media:content url="http://serjaum.files.wordpress.com/2009/08/navigationrules1.png" medium="image">
			<media:title type="html">navigationRules</media:title>
		</media:content>

		<media:content url="http://serjaum.files.wordpress.com/2009/08/index.png" medium="image">
			<media:title type="html">index</media:title>
		</media:content>

		<media:content url="http://serjaum.files.wordpress.com/2009/08/cadastrapessoa.png" medium="image">
			<media:title type="html">cadastraPessoa</media:title>
		</media:content>

		<media:content url="http://serjaum.files.wordpress.com/2009/08/atualizapessoa.png" medium="image">
			<media:title type="html">atualizaPessoa</media:title>
		</media:content>

		<media:content url="http://serjaum.files.wordpress.com/2009/08/pesquisapessoa1.png" medium="image">
			<media:title type="html">pesquisaPessoa</media:title>
		</media:content>

		<media:content url="http://serjaum.files.wordpress.com/2009/08/removepessoa.png" medium="image">
			<media:title type="html">removePessoa</media:title>
		</media:content>
	</item>
		<item>
		<title>JSF – Tutorial RichFaces + Hibernate + MySQL – CRUD completo (parte 4)</title>
		<link>http://serjaum.wordpress.com/2009/08/19/jsf-%e2%80%93-tutorial-richfaces-hibernate-mysql-%e2%80%93-crud-completo-parte-4/</link>
		<comments>http://serjaum.wordpress.com/2009/08/19/jsf-%e2%80%93-tutorial-richfaces-hibernate-mysql-%e2%80%93-crud-completo-parte-4/#comments</comments>
		<pubDate>Wed, 19 Aug 2009 02:28:05 +0000</pubDate>
		<dc:creator>serjaumfantin</dc:creator>
				<category><![CDATA[Framework]]></category>
		<category><![CDATA[Hibernate]]></category>
		<category><![CDATA[JSF]]></category>
		<category><![CDATA[JUnit]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://serjaum.wordpress.com/?p=662</guid>
		<description><![CDATA[Este é o quarto post referente à nossa aplicação JSF completa utilizando RichFaces + Hibernate + MySQL na prática.
Dando continuidade ao desenvolvimento da nossa aplicação, codificarei o Managed Bean, que é a classe que receberá as solicitações da camada de visão (JSP), e as encaminhará para a camada de Façade. Nesta etapa o sistema já [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=serjaum.wordpress.com&blog=3927959&post=662&subd=serjaum&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p><span style="color:#000000;">Este é o quarto post referente à nossa aplicação JSF completa utilizando <a href="http://www.jboss.org/jbossrichfaces/">RichFaces</a> + <a href="https://www.hibernate.org/">Hibernate</a> + <a href="http://www.mysql.com/">MySQL</a> na prática.</span></p>
<p><span style="color:#000000;">Dando continuidade ao desenvolvimento da nossa aplicação, codificarei o Managed Bean, que é a classe que receberá as solicitações da camada de visão (JSP), e as encaminhará para a camada de Façade. Nesta etapa o sistema já entrará em funcionamento com suas operações CRUD básicas.<br />
</span></p>
<h2>Estrutura do projeto</h2>
<p style="text-align:center;"><img class="aligncenter size-full wp-image-668" title="mb" src="http://serjaum.files.wordpress.com/2009/08/mb.png?w=234&#038;h=461" alt="mb" width="234" height="461" /></p>
<h2>Códigos</h2>
<p><strong>PessoaMB.java:</strong></p>
<blockquote>
<pre>package br.com.serjaum.mb;

import java.io.Serializable;
import java.util.List;

import br.com.serjaum.facade.PessoaFacade;
import br.com.serjaum.facade.PessoaFacadeImpl;
import br.com.serjaum.modelo.Pessoa;

public class PessoaMB implements Serializable {

    private static final long serialVersionUID = -333995781063775201L;
    private Pessoa pessoa = new Pessoa();
    private Long id;

    public PessoaMB(){
        System.out.println(" &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Contrutor do PESSOA_MB &lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;");

        if(this.pessoa == null){
            this.pessoa = new Pessoa();
        }
    }

    public String save(){
        PessoaFacade pessoaService = new PessoaFacadeImpl();
        pessoaService.salva(this.pessoa);
        this.pessoa = new Pessoa();
        return "cadastraSucesso";
    }

    public String delete(){
        PessoaFacade pessoaService = new PessoaFacadeImpl();
        this.pessoa.setId(id);
        pessoaService.remove(this.pessoa);
        this.pessoa = new Pessoa();
        return "removeSucesso";
    }

    public String merge(){
        PessoaFacade pessoaService = new PessoaFacadeImpl();
        pessoaService.atualiza(this.pessoa);
        this.pessoa = new Pessoa();
        return "atualizaSucesso";
    }

    public String load(){
        PessoaFacade pessoaService = new PessoaFacadeImpl();
        this.pessoa = pessoaService.procura(this.id);
        return "pesquisaSucesso";
    }

    public String pesquisaByNome(){
        PessoaFacadeImpl pessoaService = new PessoaFacadeImpl();
        this.pessoa = pessoaService.procuraByNome(this.pessoa.getNome());
        return "pesquisaByNomeSucesso";
    }

    public List&lt;Pessoa&gt; getPessoas(){
        PessoaFacade pessoaService = new PessoaFacadeImpl();
        return pessoaService.lista();
    }

    public List&lt;Pessoa&gt; getPessoasByNome(){
        PessoaFacade pessoaService = new PessoaFacadeImpl();
        List&lt;Pessoa&gt; lista = pessoaService.pesquisaPessoasByNome(this.pessoa.getNome());
        return lista;
    }

    public Pessoa getPessoa() {
       return pessoa;
   }

   public void setPessoa(Pessoa pessoa) {
       this.pessoa = pessoa;
   }

   public Long getId() {
       return id;
   }

   public void setId(Long id) {
      this.id = id;
   }
 }</pre>
</blockquote>
<p><strong>atualizaPessoa.jsp</strong></p>
<blockquote>
<pre>&lt;%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%&gt;
&lt;%@ taglib prefix="f" uri="http://java.sun.com/jsf/core"%&gt;
&lt;%@ taglib prefix="h" uri="http://java.sun.com/jsf/html"%&gt;
&lt;%@ taglib prefix="rich" uri="http://richfaces.ajax4jsf.org/rich"%&gt;
&lt;%@ taglib prefix="a4j" uri="http://richfaces.org/a4j"%&gt;

&lt;!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"&gt;
&lt;html&gt;
&lt;head&gt;
 &lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8"&gt;
&lt;/head&gt;

&lt;body&gt;
&lt;f:view&gt;
 &lt;h:form&gt;
 &lt;a4j:keepAlive beanName="pessoaMB" /&gt;
 &lt;fieldset&gt;&lt;legend&gt;Atualização de Dados&lt;/legend&gt; 

 &lt;rich:dataTable value="#{pessoaMB.pessoas}" var="fisica" rows="10" id="fisicas" width="100%" cellspacing="0" cellpadding="0" border="1"&gt;
 &lt;h:column&gt;
 &lt;f:facet name="header"&gt;
 &lt;h:outputText value="NOME" /&gt;
 &lt;/f:facet&gt;
 &lt;h:outputText value="#{fisica.nome}" /&gt;
 &lt;/h:column&gt;

 &lt;h:column&gt;
 &lt;f:facet name="header"&gt;
 &lt;h:outputText value="E-MAIL" /&gt;
 &lt;/f:facet&gt;
 &lt;h:outputText value="#{fisica.email}" /&gt;
 &lt;/h:column&gt;

 &lt;h:column&gt;
 &lt;f:facet name="header"&gt;
 &lt;h:outputText value="CPF" /&gt;
 &lt;/f:facet&gt;
 &lt;h:outputText value="#{fisica.cpf}" /&gt;
 &lt;/h:column&gt;

 &lt;h:column&gt;
 &lt;f:facet name="header"&gt;
 &lt;h:outputText value="DATA NASC." /&gt;
 &lt;/f:facet&gt;
 &lt;h:outputText value="#{fisica.dataNascimento}"&gt;
 &lt;f:convertDateTime pattern="dd/MM/yyyy" /&gt;
 &lt;/h:outputText&gt;
 &lt;/h:column&gt;

 &lt;h:column&gt;
 &lt;f:facet name="header"&gt;
 &lt;h:outputText value="CELULAR" /&gt;
 &lt;/f:facet&gt;
 &lt;h:outputText value="#{fisica.telefoneCelular}" /&gt;
 &lt;/h:column&gt;

 &lt;h:column&gt;
 &lt;a4j:commandLink reRender="panelGridInputs"&gt;
 &lt;h:outputText value="Atualiza"/&gt;
 &lt;f:setPropertyActionListener  value="#{fisica}" target="#{pessoaMB.pessoa}"/&gt;
 &lt;/a4j:commandLink&gt;

 &lt;/h:column&gt;

 &lt;f:facet name="footer"&gt;
 &lt;rich:datascroller /&gt;
 &lt;/f:facet&gt;

 &lt;/rich:dataTable&gt;

 &lt;h:panelGrid columns="2" id="panelGridInputs"&gt;
 &lt;h:outputLabel for="nome" value="Nome "  /&gt;
 &lt;h:inputText id="nome" value="#{pessoaMB.pessoa.nome}" style=" width : 254px;"/&gt;

 &lt;h:outputLabel for="email" value="E-mail "  /&gt;
 &lt;h:inputText id="email" value="#{pessoaMB.pessoa.email}" style=" width : 249px;"/&gt;

 &lt;h:outputLabel for="cpf" value="CPF "  /&gt;
 &lt;h:inputText id="cpf" validatorMessage="CPF inválido!" value="#{pessoaMB.pessoa.cpf}" size="60" style=" width : 106px;"/&gt;

 &lt;h:outputLabel for="dataNasc" value="Data Nascimento: "  /&gt;
 &lt;h:inputText id="dataNasc" validatorMessage="Data de nascimento com formato inválido!" value="#{pessoaMB.pessoa.dataNascimento}" size="60" style=" width : 75px;"&gt;
 &lt;f:convertDateTime pattern="dd/MM/yyyy" /&gt;
 &lt;/h:inputText&gt; 

 &lt;h:outputLabel for="telCel" value="Tel. Celular "  /&gt;
 &lt;h:inputText id="telCel" value="#{pessoaMB.pessoa.telefoneCelular}" /&gt;

 &lt;h:commandButton value="Salvar modificações" action="#{pessoaMB.merge}"/&gt;

 &lt;/h:panelGrid&gt;
 &lt;/fieldset&gt;

 &lt;/h:form&gt;
&lt;/f:view&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
</blockquote>
<p><span id="more-662"></span></p>
<p><strong>cadastraPessoa.jsp:</strong></p>
<blockquote>
<pre>&lt;%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%&gt;
&lt;%@ taglib prefix="f" uri="http://java.sun.com/jsf/core"%&gt;
&lt;%@ taglib prefix="h" uri="http://java.sun.com/jsf/html"%&gt;
&lt;%@ taglib prefix="rich" uri="http://richfaces.ajax4jsf.org/rich"%&gt;

&lt;!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"&gt;
&lt;html&gt;
&lt;head&gt;
 &lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8"&gt;
&lt;/head&gt;

&lt;body&gt;
&lt;f:view&gt;
 &lt;h:form&gt;
 &lt;h:messages/&gt;

 &lt;fieldset&gt;
 &lt;legend&gt;Cadastro de Pessoa&lt;/legend&gt;
 &lt;h:panelGrid columns="2"&gt;
 &lt;h:outputLabel for="nome" value="Nome "  /&gt;
 &lt;h:inputText id="nome" value="#{pessoaMB.pessoa.nome}" styleClass="edit" size="40" /&gt;

 &lt;h:outputLabel for="email" value="E-mail "  /&gt;
 &lt;h:inputText id="email" value="#{pessoaMB.pessoa.email}" styleClass="edit" size="30" /&gt;

 &lt;h:outputLabel for="cpf" value="CPF "  /&gt;
 &lt;h:inputText id="cpf" value="#{pessoaMB.pessoa.cpf}" styleClass="edit" size="11" /&gt;

 &lt;h:outputLabel for="dataNasc" value="Data Nascimento "  /&gt;
 &lt;h:inputText id="dataNasc" validatorMessage="Data de nascimento com formato inválido!" value="#{pessoaMB.pessoa.dataNascimento}" styleClass="edit" size="10" &gt;
 &lt;f:convertDateTime pattern="dd/MM/yyyy" /&gt;
 &lt;/h:inputText&gt;

 &lt;h:outputLabel for="telCel" value="Tel. Celular "  /&gt;
 &lt;h:inputText id="telCel" value="#{pessoaMB.pessoa.telefoneCelular}" styleClass="edit" size="10" /&gt;

 &lt;h:commandButton value="Inserir" action="#{pessoaMB.save}" styleClass="botoes"/&gt;
 &lt;/h:panelGrid&gt;
 &lt;/fieldset&gt;
 &lt;/h:form&gt;
&lt;/f:view&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
</blockquote>
<p><strong>pesquisaPessoa.jsp:</strong></p>
<blockquote>
<pre>&lt;%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%&gt;
&lt;%@ taglib prefix="f" uri="http://java.sun.com/jsf/core"%&gt;
&lt;%@ taglib prefix="h" uri="http://java.sun.com/jsf/html"%&gt;
&lt;%@ taglib prefix="rich" uri="http://richfaces.ajax4jsf.org/rich"%&gt;
&lt;%@ taglib prefix="a4j" uri="http://richfaces.org/a4j"%&gt;

&lt;!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"&gt;
&lt;html&gt;
&lt;head&gt;
 &lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8"&gt;
&lt;/head&gt;

&lt;body&gt;
&lt;f:view&gt;

 &lt;h:form&gt;
 &lt;a4j:keepAlive beanName="pessoaMB" /&gt;
 &lt;h:messages/&gt;

 &lt;fieldset&gt;
 &lt;legend&gt;Pesquisa de Pessoas&lt;/legend&gt;
 &lt;h:panelGrid columns="2"&gt;

 &lt;h:outputLabel for="nomeLabel" value="Digite o nome: " /&gt;
 &lt;h:inputText id="nomeInput" value="#{pessoaMB.pessoa.nome}" style=" width : 321px;" /&gt;

 &lt;h:commandButton value="Pesquisar" action="#{pessoaMB.pesquisaByNome}"/&gt;
 &lt;/h:panelGrid&gt;

 &lt;h:panelGrid columns="2" id="panelGridInputs"&gt;
 &lt;h:outputLabel for="nome" value="Nome "  /&gt;
 &lt;h:inputText id="nome" readonly="true" value="#{pessoaMB.pessoa.nome}" style=" width : 254px;"/&gt;

 &lt;h:outputLabel for="email" value="E-mail "  /&gt;
 &lt;h:inputText id="email" readonly="true" value="#{pessoaMB.pessoa.email}" style=" width : 249px;"/&gt;

 &lt;h:outputLabel for="cpf" value="CPF "  /&gt;
 &lt;h:inputText id="cpf" readonly="true" validatorMessage="CPF inválido!" value="#{pessoaMB.pessoa.cpf}" size="60" style=" width : 106px;"/&gt;

 &lt;h:outputLabel for="dataNasc" value="Data Nascimento: "  /&gt;
 &lt;h:inputText id="dataNasc" readonly="true" validatorMessage="Data de nascimento com formato inválido!" value="#{pessoaMB.pessoa.dataNascimento}" size="60" style=" width : 75px;"&gt;
 &lt;f:convertDateTime pattern="dd/MM/yyyy" /&gt;
 &lt;/h:inputText&gt; 

 &lt;h:outputLabel for="telCel" value="Tel. Celular "  /&gt;
 &lt;h:inputText id="telCel" readonly="true" value="#{pessoaMB.pessoa.telefoneCelular}" /&gt;
 &lt;/h:panelGrid&gt;
 &lt;/fieldset&gt;
 &lt;/h:form&gt;
&lt;/f:view&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
</blockquote>
<p><strong>removePessoa.jsp:</strong></p>
<blockquote>
<pre>&lt;%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%&gt;
&lt;%@ taglib prefix="f" uri="http://java.sun.com/jsf/core"%&gt;
&lt;%@ taglib prefix="h" uri="http://java.sun.com/jsf/html"%&gt;
&lt;%@ taglib prefix="rich" uri="http://richfaces.ajax4jsf.org/rich"%&gt;
&lt;%@ taglib prefix="a4j" uri="http://richfaces.org/a4j"%&gt;

&lt;!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"&gt;
&lt;html&gt;
&lt;head&gt;
 &lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8"&gt;
&lt;/head&gt;

&lt;body&gt;
&lt;f:view&gt;
 &lt;h:form&gt;
 &lt;fieldset&gt;&lt;legend&gt;Remoção de Pessoas&lt;/legend&gt; 

 &lt;rich:dataTable value="#{pessoaMB.pessoas}" var="fisica" rows="10" id="fisicas" width="100%" cellspacing="0" cellpadding="0" border="1"&gt;
 &lt;h:column&gt;
 &lt;f:facet name="header"&gt;
 &lt;h:outputText value="NOME" /&gt;
 &lt;/f:facet&gt;
 &lt;h:outputText value="#{fisica.nome}" /&gt;
 &lt;/h:column&gt;

 &lt;h:column&gt;
 &lt;f:facet name="header"&gt;
 &lt;h:outputText value="E-MAIL" /&gt;
 &lt;/f:facet&gt;
 &lt;h:outputText value="#{fisica.email}" /&gt;
 &lt;/h:column&gt;

 &lt;h:column&gt;
 &lt;f:facet name="header"&gt;
 &lt;h:outputText value="CPF" /&gt;
 &lt;/f:facet&gt;
 &lt;h:outputText value="#{fisica.cpf}" /&gt;
 &lt;/h:column&gt;

 &lt;h:column&gt;
 &lt;f:facet name="header"&gt;
 &lt;h:outputText value="DATA NASC." /&gt;
 &lt;/f:facet&gt;
 &lt;h:outputText value="#{fisica.dataNascimento}"&gt;
 &lt;f:convertDateTime pattern="dd/MM/yyyy" /&gt;
 &lt;/h:outputText&gt;
 &lt;/h:column&gt;

 &lt;h:column&gt;
 &lt;f:facet name="header"&gt;
 &lt;h:outputText value="CELULAR" /&gt;
 &lt;/f:facet&gt;
 &lt;h:outputText value="#{fisica.telefoneCelular}" /&gt;
 &lt;/h:column&gt;

 &lt;h:column&gt;
 &lt;f:facet name="header"&gt;
 &lt;h:outputText value="Exclusão"/&gt;
 &lt;/f:facet&gt;

 &lt;h:commandLink action="#{pessoaMB.delete}"&gt;
 &lt;h:outputText value="Excluir"/&gt;
 &lt;f:setPropertyActionListener value="#{fisica.id}" target="#{pessoaMB.id}" /&gt;
 &lt;/h:commandLink&gt;

 &lt;/h:column&gt;

 &lt;f:facet name="footer"&gt;
 &lt;rich:datascroller /&gt;
 &lt;/f:facet&gt;

 &lt;/rich:dataTable&gt;
 &lt;/fieldset&gt;

 &lt;/h:form&gt;
&lt;/f:view&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
</blockquote>
<h2><span style="color:#888888;">Importando o projeto</span></h2>
<ol>
<li><span style="color:#000000;">Baixe o projeto atualizado &gt;&gt;<a href="http://www.4shared.com/file/126217731/567143c6/jsf_parte4.html">aqui</a>&lt;&lt;;</span></li>
<li><span style="color:#000000;">Descompacte o projeto no seu <em>workspace</em>;</span></li>
<li><span style="color:#000000;">No Eclipse vá em: File –&gt; Import –&gt; General – Existing Projects into Workspace –&gt; Next –&gt; Selecione o projeto descompactado no workspace –&gt; Finish.</span></li>
</ol>
<h2><span style="color:#888888;">Criando o banco de dados</span></h2>
<ol>
<li><span style="color:#000000;">Com o MySQL instalado e configurado com usuário: <strong>root</strong> e senha: <strong>root</strong> crie um novo schema com o nome de <strong><em>jsf</em></strong>.</span></li>
<li><span style="color:#000000;">Execute a classe <em>br.com.serjaum.util.<strong>GerarTabelas.java. </strong>E</em>ssa classe criará as tabelas que foram mapeadas no arquivo <em>hibernate.cfg.xml</em>, no caso a classe <strong><em>Pessoa</em></strong> terá uma tabela correspondente com o nome de <strong><em>pessoa</em></strong> no nosso banco de dados;</span></li>
</ol>
<h2><span style="color:#888888;">Próximas etapas</span></h2>
<p><span style="color:#000000;">O nosso sistema já está funcionando, mas a interface dele não está muito amigável para ser utilizada pelo usuário final.  As quatro operações CRUD estão codificadas e funcionando perfeitamente, então nas próximas etapas irei adicionar regras de navegação, validadores, conversores, máscaras, CSS, etc.</span></p>
<p><span style="color:#000000;">Até o próximo post!<br />
</span></p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/serjaum.wordpress.com/662/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/serjaum.wordpress.com/662/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/serjaum.wordpress.com/662/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/serjaum.wordpress.com/662/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/serjaum.wordpress.com/662/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/serjaum.wordpress.com/662/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/serjaum.wordpress.com/662/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/serjaum.wordpress.com/662/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/serjaum.wordpress.com/662/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/serjaum.wordpress.com/662/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=serjaum.wordpress.com&blog=3927959&post=662&subd=serjaum&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://serjaum.wordpress.com/2009/08/19/jsf-%e2%80%93-tutorial-richfaces-hibernate-mysql-%e2%80%93-crud-completo-parte-4/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b984204ba36d6d9166522dd067649282?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">serjaumfantin</media:title>
		</media:content>

		<media:content url="http://serjaum.files.wordpress.com/2009/08/mb.png" medium="image">
			<media:title type="html">mb</media:title>
		</media:content>
	</item>
		<item>
		<title>JSF – Tutorial RichFaces + Hibernate + MySQL – CRUD completo (parte 3)</title>
		<link>http://serjaum.wordpress.com/2009/08/18/jsf-%e2%80%93-tutorial-richfaces-hibernate-mysql-%e2%80%93-crud-completo-parte-3/</link>
		<comments>http://serjaum.wordpress.com/2009/08/18/jsf-%e2%80%93-tutorial-richfaces-hibernate-mysql-%e2%80%93-crud-completo-parte-3/#comments</comments>
		<pubDate>Tue, 18 Aug 2009 17:46:49 +0000</pubDate>
		<dc:creator>serjaumfantin</dc:creator>
				<category><![CDATA[Framework]]></category>
		<category><![CDATA[Hibernate]]></category>
		<category><![CDATA[JSF]]></category>
		<category><![CDATA[JUnit]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://serjaum.wordpress.com/?p=640</guid>
		<description><![CDATA[Este é o terceiro post referente à nossa aplicação JSF completa utilizando RichFaces + Hibernate + MySQL na prática.
Dando continuidade ao desenvolvimento da nossa aplicação, codificarei a camada de Façade que é responsável por abstrair a camada de negócios, que contribuirá para a redução do acoplamento entre as camadas da aplicação. Essa camada tem a [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=serjaum.wordpress.com&blog=3927959&post=640&subd=serjaum&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p><span style="color:#000000;">Este é o terceiro post referente à nossa aplicação JSF completa utilizando <a href="http://www.jboss.org/jbossrichfaces/">RichFaces</a> + <a href="https://www.hibernate.org/">Hibernate</a> + <a href="http://www.mysql.com/">MySQL</a> na prática.</span></p>
<p><span style="color:#000000;">Dando continuidade ao desenvolvimento da nossa aplicação, codificarei a camada de <a href="http://en.wikipedia.org/wiki/Facade_pattern">Façade</a> que é responsável por abstrair a camada de negócios, que contribuirá para a redução do acoplamento entre as camadas da aplicação. Essa camada tem a função de receber solicitações de operações e repassá-las para os métodos de negócio/persistência que estão em outras camadas, mantendo a arquitetura coerente e aumentando a manutenabilidade da aplicação.</span></p>
<p><span style="color:#000000;">Obs: por se tratar de um tutorial prático, preferi simplificar a aplicação adicionando a camada de Façade de uma maneira simples, por isso fiz o gerenciamento de sessões/transações dentro da classe PessoaFacadeImpl.java. O ideal seria retirar esse código de abertura/fechamento de sessões/transações e colocá-lo em um filtro, por exemplo: <a href="https://www.hibernate.org/43.html">Open Session In View</a>. Isso é aplicado quando utilizamos um Servlet Contêiner como o <a href="http://tomcat.apache.org/">Tomcat</a> ou <a href="http://jetty.mortbay.com/jetty/">Jetty</a>, mas se o deploy for feito em um <a href="http://www.theserverside.com/tt/articles/article.tss?l=WhatIsAnAppServer">Servidor de Aplicação</a> (<a href="http://www.jboss.org/jbossas/">JBoss</a>, <a href="https://glassfish.dev.java.net/">GlassFish</a>, etc) o gerenciamento fica por conta do mesmo, daí é só alegria (ou não?!).<br />
</span></p>
<h2>Estrutura do projeto</h2>
<p style="text-align:center;"><img class="aligncenter size-full wp-image-647" title="facade" src="http://serjaum.files.wordpress.com/2009/08/facade.png?w=252&#038;h=351" alt="facade" width="252" height="351" /></p>
<h2>Códigos</h2>
<p><strong>BaseFacade.java:</strong></p>
<blockquote>
<pre>package br.com.serjaum.facade;

import java.io.Serializable;
import java.util.List;

public interface BaseFacade&lt;T&gt; extends Serializable {
    public abstract void salva(T t); 

    public abstract void remove(T t);  

    public abstract T procura(Long id);  

    public abstract void atualiza(T t);

    public abstract List&lt;T&gt; lista();
}</pre>
</blockquote>
<p><strong>PessoaFacade.java:</strong></p>
<blockquote>
<pre>package br.com.serjaum.facade; 

import java.util.List;
import br.com.serjaum.modelo.Pessoa; 

public interface PessoaFacade extends BaseFacade&lt;Pessoa&gt;{
    public void salva(Pessoa p); 

    public void remove(Pessoa p); 

    public Pessoa procura(Long id); 

    public void atualiza(Pessoa p); 

    public List&lt;Pessoa&gt; pesquisaPessoasByNome(String nome);
}</pre>
</blockquote>
<p><span id="more-640"></span><br />
<strong><strong>PessoaFacadeImpl.java:</strong></strong></p>
<blockquote>
<pre>package br.com.serjaum.facade; 

import java.util.List;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.AnnotationConfiguration;
import br.com.serjaum.dao.PessoaDAO;
import br.com.serjaum.modelo.Pessoa; 

public class PessoaFacadeImpl implements PessoaFacade { 

    private static final long serialVersionUID = 1818242808424001885L;
    private PessoaDAO pessoaDAO;
    private SessionFactory sf;
    private Session session;
    private Transaction tx; 

    public void salva(Pessoa p) {
        sf = new AnnotationConfiguration().configure().buildSessionFactory();
        session = sf.openSession();
        tx = session.beginTransaction();
        pessoaDAO = new PessoaDAO(session, Pessoa.class); 

        this.pessoaDAO.save(p); 

        tx.commit();
        session.close();
   } 

   public void atualiza(Pessoa p) {
       sf = new AnnotationConfiguration().configure().buildSessionFactory();
       session = sf.openSession();
       tx = session.beginTransaction();
       pessoaDAO = new PessoaDAO(session, Pessoa.class); 

       this.pessoaDAO.merge(p); 

       tx.commit();
       session.close();
   } 

   public Pessoa procura(Long id) {
       sf = new AnnotationConfiguration().configure().buildSessionFactory();
       session = sf.openSession();
       tx = session.beginTransaction();
       pessoaDAO = new PessoaDAO(session, Pessoa.class); 

       Pessoa p = this.pessoaDAO.load(id); 

       tx.commit();
       session.close(); 

       return p;
   } 

   public void remove(Pessoa p) {
       sf = new AnnotationConfiguration().configure().buildSessionFactory();
       session = sf.openSession();
       tx = session.beginTransaction();
       pessoaDAO = new PessoaDAO(session, Pessoa.class); 

       this.pessoaDAO.delete(p); 

       tx.commit();
       session.close();
  } 

  public List&lt;Pessoa&gt; lista() {
      sf = new AnnotationConfiguration().configure().buildSessionFactory();
      session = sf.openSession();
      tx = session.beginTransaction();
      pessoaDAO = new PessoaDAO(session, Pessoa.class);   

      List&lt;Pessoa&gt; lista = this.pessoaDAO.list(); 

      tx.commit();
      session.close();  

      return lista;
 } 

 public List&lt;Pessoa&gt; pesquisaPessoasByNome(String nome) {
     sf = new AnnotationConfiguration().configure().buildSessionFactory();
     session = sf.openSession();
     tx = session.beginTransaction();
     pessoaDAO = new PessoaDAO(session, Pessoa.class); 

     List&lt;Pessoa&gt; lista = this.pessoaDAO.pesquisaPessoas(nome); 

     tx.commit();
     session.close(); 

     return lista;
 } 

 public Pessoa procuraById(Long id){
     sf = new AnnotationConfiguration().configure().buildSessionFactory();
     session = sf.openSession();
     tx = session.beginTransaction();
     pessoaDAO = new PessoaDAO(session, Pessoa.class); 

     Pessoa p = this.pessoaDAO.pesquisaPessoaById(id); 

     tx.commit();
     session.close(); 

     return p;
 } 

 public Pessoa procuraByNome(String nome){
     sf = new AnnotationConfiguration().configure().buildSessionFactory();
     session = sf.openSession();
     tx = session.beginTransaction();
     pessoaDAO = new PessoaDAO(session, Pessoa.class); 

     Pessoa p = this.pessoaDAO.pesquisaPessoaByNome(nome); 

     tx.commit();
     session.close();   

     return p;
 } 

 public Pessoa procuraByEmail(String email){
     sf = new AnnotationConfiguration().configure().buildSessionFactory();
     session = sf.openSession();
     tx = session.beginTransaction();
     pessoaDAO = new PessoaDAO(session, Pessoa.class);   

     Pessoa p = this.pessoaDAO.pesquisaPessoaByEmail(email); 

     tx.commit();
     session.close(); 

     return p;
 }
}</pre>
</blockquote>
<h2>Importando o projeto</h2>
<ol>
<li><span style="color:#000000;">Baixe o projeto atualizado &gt;&gt;<a href="http://www.4shared.com/file/126216407/2ec56c0c/jsf_parte3.html">aqui</a>&lt;&lt;;</span></li>
<li><span style="color:#000000;">Descompacte o projeto no seu <em>workspace</em>;</span></li>
<li><span style="color:#000000;">No Eclipse vá em: File –&gt; Import –&gt; General – Existing Projects into Workspace –&gt; Next –&gt; Selecione o projeto descompactado no workspace –&gt; Finish.</span></li>
</ol>
<h2>Criando o banco de dados</h2>
<ol>
<li><span style="color:#000000;">Com o MySQL instalado e configurado com usuário: <strong>root</strong> e senha: <strong>root</strong> crie um novo schema com o nome de <strong><em>jsf</em></strong>.</span></li>
<li><span style="color:#000000;">Execute a classe <em>br.com.serjaum.util.<strong>GerarTabelas.java. </strong>E</em>ssa classe criará as tabelas que foram mapeadas no arquivo <em>hibernate.cfg.xml</em>, no caso a classe <strong><em>Pessoa</em></strong> terá uma tabela correspondente com o nome de <strong><em>pessoa</em></strong> no nosso banco de dados;</span></li>
</ol>
<p><span style="color:#000000;">No próximo post eu irei codificar o nosso Managed Bean e os arquivos da camada de visão.</span></p>
<p><span style="color:#000000;">Até o próximo post!</span></p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/serjaum.wordpress.com/640/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/serjaum.wordpress.com/640/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/serjaum.wordpress.com/640/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/serjaum.wordpress.com/640/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/serjaum.wordpress.com/640/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/serjaum.wordpress.com/640/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/serjaum.wordpress.com/640/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/serjaum.wordpress.com/640/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/serjaum.wordpress.com/640/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/serjaum.wordpress.com/640/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=serjaum.wordpress.com&blog=3927959&post=640&subd=serjaum&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://serjaum.wordpress.com/2009/08/18/jsf-%e2%80%93-tutorial-richfaces-hibernate-mysql-%e2%80%93-crud-completo-parte-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b984204ba36d6d9166522dd067649282?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">serjaumfantin</media:title>
		</media:content>

		<media:content url="http://serjaum.files.wordpress.com/2009/08/facade.png" medium="image">
			<media:title type="html">facade</media:title>
		</media:content>
	</item>
		<item>
		<title>JSF – Tutorial RichFaces + Hibernate + MySQL – CRUD completo (parte 2)</title>
		<link>http://serjaum.wordpress.com/2009/08/01/jsf-%e2%80%93-tutorial-richfaces-hibernate-mysql-%e2%80%93-crud-completo-parte-2/</link>
		<comments>http://serjaum.wordpress.com/2009/08/01/jsf-%e2%80%93-tutorial-richfaces-hibernate-mysql-%e2%80%93-crud-completo-parte-2/#comments</comments>
		<pubDate>Sat, 01 Aug 2009 14:34:11 +0000</pubDate>
		<dc:creator>serjaumfantin</dc:creator>
				<category><![CDATA[Framework]]></category>
		<category><![CDATA[Hibernate]]></category>
		<category><![CDATA[JSF]]></category>
		<category><![CDATA[JUnit]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://serjaum.wordpress.com/?p=551</guid>
		<description><![CDATA[Este é o segundo post referente à nossa aplicação JSF completa utilizando RichFaces + Hibernate + MySQL na prática.
Dando continuidade ao desenvolvimento da nossa aplicação, codificarei a camada DAO (Data Access Object) que é responsável por isolar a camada superior do acesso aos dados. Na maioria dos casos teremos uma classe DAO para cada classe [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=serjaum.wordpress.com&blog=3927959&post=551&subd=serjaum&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p><span style="color:#000000;">Este é o segundo post referente à nossa aplicação JSF completa utilizando <a href="http://www.jboss.org/jbossrichfaces/">RichFaces</a> + <a href="https://www.hibernate.org/">Hibernate</a> + <a href="http://www.mysql.com/">MySQL</a> na prática.</span></p>
<p><span style="color:#000000;">Dando continuidade ao desenvolvimento da nossa aplicação, codificarei a camada <a href="http://java.sun.com/blueprints/corej2eepatterns/Patterns/DataAccessObject.html">DAO</a> (Data Access Object) que é responsável por isolar a camada superior do acesso aos dados. Na maioria dos casos teremos uma classe DAO para cada classe do domínio do sistema. Na classe DAO estão os métodos fundamentais para persistência e na classe <strong>PessoaDAO</strong> temos os métodos específicos de manipulação de dados referente à classe <strong>Pessoa</strong> mais os métodos da classe DAO que são obtidos por herança.<br />
</span></p>
<h2>Estrutura do projeto</h2>
<p style="text-align:center;"><img class="aligncenter size-full wp-image-578" title="estrutura" src="http://serjaum.files.wordpress.com/2009/08/estrutura.png?w=282&#038;h=405" alt="estrutura" width="282" height="405" /></p>
<h2>Códigos</h2>
<p><strong>DAO.java:</strong></p>
<blockquote>
<pre>package br.com.serjaum.dao;

import java.util.List;
import org.apache.log4j.Logger;
import org.hibernate.Session;

public class DAO {
    private static Logger logger = Logger.getLogger(DAO.class);
    private Class persistentClass;
    protected Session session;

    public DAO(Session session, Class persistentClass) {
        this.session = session;
        this.persistentClass = persistentClass;
    }

    @SuppressWarnings("unchecked")
    public T load(Long id) {
        logger.info("lendo " + persistentClass + " com id " + id);
        return (T) session.load(persistentClass, id);
    }

     public void save(T t) {
        logger.info("salvando  " + t);
        session.save(t);
    }

    public void delete(T t) {
	logger.info("Deletando " + t);
	session.delete(t);
    }

    @SuppressWarnings("unchecked")
        public List list() {
	logger.info("Listando todos");
    	return session.createCriteria(persistentClass).list();
    }

    public void merge(T t) {
        logger.info("Salvando ou atualizando " + t);
        session.merge(t);
    }
}</pre>
</blockquote>
<p><span id="more-551"></span><br />
<strong>PessoaDAO.java</strong></p>
<blockquote>
<pre>package br.com.serjaum.dao;

import java.util.List;

import org.apache.log4j.Logger;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Projections;
import org.hibernate.criterion.Restrictions;

import br.com.serjaum.modelo.Pessoa;

public class PessoaDAO extends DAO&lt;Pessoa&gt;{

	private Logger logger = Logger.getLogger(PessoaDAO.class);

	public PessoaDAO(Session session, Class&lt;?&gt; classe) {
		super(session, classe);
	}

	public Pessoa pesquisaPessoaById(Long idPessoa) {
		logger.info("pesquisaPessoaById : " + idPessoa);
		return (Pessoa) session.load(Pessoa.class, idPessoa);
	}

	public String pesquisaPessoaByNome(String nome) {
		logger.info("pesquisaPessoaByNome : " + nome);
		Criteria c = session.createCriteria(Pessoa.class);
		c.add(Restrictions.ilike("nome", nome + "%"));
		c.addOrder(Order.asc("nome"));

		return (String)c.uniqueResult();
	}

	public Pessoa pesquisaPessoaByEmail(String email) {
		logger.info("pesquisaPessoaByEmail : " + email);
		Criteria c = session.createCriteria(Pessoa.class);
		c.add(Restrictions.ilike("email", email + "%"));

		return (Pessoa)c.uniqueResult();
	}

	public List&lt;String&gt; findByNameSuggest(String busca){
		logger.info("findByNameSuggest : " + busca);
		Criteria c = session.createCriteria(Pessoa.class);
		c.add(Restrictions.ilike("nome", busca + "%"));
		c.addOrder(Order.asc("nome"));
		c.setProjection(Projections.property("nome"));

		return c.list();
	}
}</pre>
</blockquote>
<div id="_mcePaste" style="overflow:hidden;position:absolute;left:-10000px;top:1969px;width:1px;height:1px;">package br.com.serjaum.dao;import java.util.List;import org.apache.log4j.Logger;</p>
<p>import org.hibernate.Criteria;</p>
<p>import org.hibernate.Session;</p>
<p>import org.hibernate.criterion.Order;</p>
<p>import org.hibernate.criterion.Restrictions;</p>
<p>import br.com.serjaum.entidades.Pessoa;</p>
<p>public class PessoaDAO {</p>
<p>private Session session;</p>
<p>private Logger logger = Logger.getLogger(PessoaDAO.class);</p>
<p>public PessoaDAO(Session session) {</p>
<p>logger.info(&#8220;Construtor&#8221; + session);</p>
<p>this.session = session;</p>
<p>}</p>
<p>public void insertPessoa(Pessoa pessoa) {</p>
<p>session.saveOrUpdate(pessoa);</p>
<p>}</p>
<p>public void updatePessoa(Pessoa pessoa) {</p>
<p>session.merge(pessoa);</p>
<p>}</p>
<p>public void deletePessoa(Pessoa pessoa) {</p>
<p>session.delete(pessoa);</p>
<p>}</p>
<p>public Pessoa retrievePessoa(Pessoa pessoa) {</p>
<p>return (Pessoa) session.load(Pessoa.class, pessoa.getId());</p>
<p>}</p>
<p>public Pessoa retrievePessoaById(Long idPessoa) {</p>
<p>return (Pessoa) session.load(Pessoa.class, idPessoa);</p>
<p>}</p>
<p>@SuppressWarnings(&#8220;unchecked&#8221;)</p>
<p>public List&lt;Pessoa&gt; loadAll(){</p>
<p>Criteria c = session.createCriteria(Pessoa.class);</p>
<p>c.addOrder(Order.asc(&#8220;nome&#8221;));</p>
<p>return c.list();</p>
<p>}</p>
<p>public String retrievePessoaByNome(String nome) {</p>
<p>Criteria c = session.createCriteria(Pessoa.class);</p>
<p>c.add(Restrictions.ilike(&#8220;nome&#8221;, nome + &#8220;%&#8221;));</p>
<p>c.addOrder(Order.asc(&#8220;nome&#8221;));</p>
<p>return (String)c.uniqueResult();</p>
<p>}</p>
<p>public Pessoa retrievePessoaByEmail(String email) {</p>
<p>Criteria c = session.createCriteria(Pessoa.class);</p>
<p>c.add(Restrictions.ilike(&#8220;email&#8221;, email + &#8220;%&#8221;));</p>
<p>return (Pessoa)c.uniqueResult();</p>
<p>}</p>
<p>}</p></div>
<p><strong>HibernateUtil.java</strong></p>
<blockquote>
<pre>package br.com.serjaum.dao;

import org.apache.log4j.Logger;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;

public class HibernateUtil {

	private static final Logger logger = Logger.getLogger(HibernateUtil.class);

	private static final SessionFactory sessionFactory;

	private static ThreadLocal&lt;Session&gt; sessions = new ThreadLocal&lt;Session&gt;();

	static {
		sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();
	}

	public static Session openSession() {
		if (sessions.get() != null) {
			logger.error("There was a session for this thread already!! ");
			// grave, alguem nao fechou uma sessao ja aberta!
		}
		sessions.set(sessionFactory.openSession());
		return sessions.get();
	}

	public static void closeCurrentSession() {
		sessions.get().close();
		sessions.set(null);
	}

	public static Session currentSession() {
		return sessions.get();
	}
}</pre>
</blockquote>
<p><strong>hibernate.cfg.xml:</strong></p>
<blockquote>
<pre>&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"&gt;
&lt;hibernate-configuration&gt;
 &lt;session-factory name=""&gt;
  &lt;property name="hibernate.connection.driver_class"&gt;com.mysql.jdbc.Driver&lt;/property&gt;
  &lt;property name="hibernate.connection.url"&gt;jdbc:mysql://localhost/jsf&lt;/property&gt;
  &lt;property name="hibernate.connection.username"&gt;root&lt;/property&gt;
  &lt;property name="hibernate.connection.password"&gt;root&lt;/property&gt;
  &lt;property name="hibernate.dialect"&gt;org.hibernate.dialect.MySQLInnoDBDialect&lt;/property&gt;
  &lt;property name="hibernate.format_sql"&gt;false&lt;/property&gt;
  &lt;property name="hibernate.show_sql"&gt;false&lt;/property&gt;
  &lt;property name="hibernate.hbm2ddl.auto"&gt;none&lt;/property&gt;
  &lt;property name="hibernate.c3p0.acquire_increment"&gt;1&lt;/property&gt;
  &lt;property name="hibernate.c3p0.idle_test_period"&gt;100&lt;/property&gt;
  &lt;property name="hibernate.c3p0.max_size"&gt;10&lt;/property&gt;
  &lt;property name="hibernate.c3p0.max_statements"&gt;0&lt;/property&gt;
  &lt;property name="hibernate.c3p0.min_size"&gt;5&lt;/property&gt;
  &lt;property name="hibernate.c3p0.timeout"&gt;100&lt;/property&gt;

  &lt;mapping class="br.com.serjaum.modelo.Pessoa"/&gt;

 &lt;/session-factory&gt;
&lt;/hibernate-configuration&gt;</pre>
</blockquote>
<div id="_mcePaste" style="overflow:hidden;position:absolute;left:-10000px;top:1969px;width:1px;height:1px;">xxx</div>
<p><strong>PessoaTest.java:</strong></p>
<blockquote>
<pre>package br.com.serjaum.pessoa.test;

import static org.junit.Assert.*;

import java.util.Date;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.AnnotationConfiguration;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import br.com.serjaum.dao.DAO;
import br.com.serjaum.modelo.Pessoa;

public class PessoaTest{
	private static Pessoa PESSOA_TESTE = new Pessoa();

	SessionFactory sf;
	Session session;
	Transaction tx;
	DAO&lt;Pessoa&gt; dao;

	@Before
	public void runBeforeEveryTest(){
		sf = new AnnotationConfiguration().configure().buildSessionFactory();
		session = sf.openSession();
		tx = session.beginTransaction();
		dao = new DAO&lt;Pessoa&gt;(session, Pessoa.class);
	}

	@After
	public void runAfterEveryTest(){
		tx.commit();
		session.close();
	}

	@Test
	public void testCadastra(){
		PESSOA_TESTE.setNome("Sérgio Fantin");
		PESSOA_TESTE.setCpf("123.456.789-10");
		PESSOA_TESTE.setEmail("sergio.lnd.fantin@gmail.com");
		PESSOA_TESTE.setTelefoneCelular("(44) 8888-8888");

		dao.save(PESSOA_TESTE);
	}

	@Test
	public void testProcura() {
		Pessoa buscada; 

		buscada = dao.load(PESSOA_TESTE.getId()); 

		assertEquals(PESSOA_TESTE.getId(), buscada.getId());
		assertEquals(PESSOA_TESTE.getNome(), buscada.getNome());
		assertEquals(PESSOA_TESTE.getEmail(), buscada.getEmail());
		assertEquals(PESSOA_TESTE.getCpf(), buscada.getCpf());
		assertEquals(PESSOA_TESTE.getTelefoneCelular(), buscada.getTelefoneCelular());
		assertEquals(PESSOA_TESTE.getDataNascimento(), buscada.getDataNascimento());
	}

	@Test
	public void testAtualiza(){
		Pessoa buscadoParaAtualizacao;
	    Pessoa buscadoAposAtualizacao;

	    buscadoParaAtualizacao = dao.load(PESSOA_TESTE.getId());
	    buscadoParaAtualizacao.setNome("Nome modificado");
	    buscadoParaAtualizacao.setEmail("email@modificado.com");
	    buscadoParaAtualizacao.setCpf("000.000.000-00");
	    buscadoParaAtualizacao.setTelefoneCelular("(00) 0000-0000");
	    buscadoParaAtualizacao.setDataNascimento(new Date());

	    dao.merge(buscadoParaAtualizacao); 

	    buscadoAposAtualizacao = dao.load(PESSOA_TESTE.getId());
	    assertEquals(buscadoParaAtualizacao.getId(), buscadoAposAtualizacao.getId());
	    assertEquals(buscadoParaAtualizacao.getNome(), buscadoAposAtualizacao.getNome());
	    assertEquals(buscadoParaAtualizacao.getEmail(), buscadoAposAtualizacao.getEmail());
	    assertEquals(buscadoParaAtualizacao.getCpf(), buscadoAposAtualizacao.getCpf());
	    assertEquals(buscadoParaAtualizacao.getTelefoneCelular(), buscadoAposAtualizacao.getTelefoneCelular());
	    assertEquals(buscadoParaAtualizacao.getDataNascimento(), buscadoAposAtualizacao.getDataNascimento());
	}

	@Test
	public void testRemove(){
		Pessoa pessoa = PESSOA_TESTE;
		pessoa.setId(1l);
		dao.delete(pessoa);
	}
}</pre>
</blockquote>
<h2>Importando o projeto</h2>
<ol>
<li><span style="color:#000000;">Baixe o projeto atualizado &gt;&gt;</span><a href="http://www.4shared.com/file/126214579/2df77570/jsf_parte2.html">aqui</a><span style="color:#000000;">&lt;&lt;;</span></li>
<li><span style="color:#000000;">Descompacte o projeto no seu <em>workspace</em>;</span></li>
<li><span style="color:#000000;">No Eclipse vá em: File –&gt; Import –&gt; General – Existing Projects into Workspace –&gt; Next –&gt; Selecione o projeto descompactado no workspace –&gt; Finish.</span></li>
</ol>
<h2>Executando o projeto</h2>
<ol>
<li><span style="color:#000000;">Com o MySQL instalado e configurado com usuário: <strong>root</strong> e senha: <strong>root</strong> crie um novo schema com o nome de <strong><em>jsf</em></strong>.</span></li>
<li><span style="color:#000000;">Execute a classe <em>br.com.serjaum.util.<strong>GerarTabelas.java. </strong>E</em>ssa classe criará as tabelas que foram mapeadas no arquivo <em>hibernate.cfg.xml</em>, no caso a classe <strong><em>Pessoa</em></strong> terá uma tabela correspondente com o nome de <strong><em>pessoa</em></strong> no nosso banco de dados;</span></li>
<li><span style="color:#000000;">Para testar a camada DAO execute a classe <em>br.com.serjaum.pessoa.test.<strong>PessoaTest.java</strong></em>.<br />
</span></li>
</ol>
<p><span style="color:#000000;">Obs: o test irá executar as 4 operações CRUD. O último teste com a assinatura <span style="text-decoration:underline;"><code>public void testRemove()</code></span><code> </code>removerá os registros gravados/atualizados pelos testes anteriores. Caso não queira remover o registro testado comente o código do método<strong> testRemove()</strong> antes de executar o teste.</span></p>
<h2>Resultado</h2>
<p style="text-align:center;"><img class="aligncenter size-full wp-image-590" title="teste" src="http://serjaum.files.wordpress.com/2009/08/teste.png?w=922&#038;h=163" alt="teste" width="922" height="163" /></p>
<p><span style="color:#000000;">Continuarei o próximo post desenvolvendo a camada de visão da aplicação. Até o próximo post!</span></p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/serjaum.wordpress.com/551/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/serjaum.wordpress.com/551/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/serjaum.wordpress.com/551/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/serjaum.wordpress.com/551/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/serjaum.wordpress.com/551/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/serjaum.wordpress.com/551/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/serjaum.wordpress.com/551/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/serjaum.wordpress.com/551/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/serjaum.wordpress.com/551/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/serjaum.wordpress.com/551/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=serjaum.wordpress.com&blog=3927959&post=551&subd=serjaum&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://serjaum.wordpress.com/2009/08/01/jsf-%e2%80%93-tutorial-richfaces-hibernate-mysql-%e2%80%93-crud-completo-parte-2/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b984204ba36d6d9166522dd067649282?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">serjaumfantin</media:title>
		</media:content>

		<media:content url="http://serjaum.files.wordpress.com/2009/08/estrutura.png" medium="image">
			<media:title type="html">estrutura</media:title>
		</media:content>

		<media:content url="http://serjaum.files.wordpress.com/2009/08/teste.png" medium="image">
			<media:title type="html">teste</media:title>
		</media:content>
	</item>
	</channel>
</rss>