<?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/"
	>

<channel>
	<title>rodrigoaguas.com</title>
	<atom:link href="http://www.rodrigoaguas.com/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.rodrigoaguas.com/blog</link>
	<description>Desenvolvimento de sites Web: acessibilidade, usabilidade, ASP, PHP, XHTML, CSS e Ajax.</description>
	<lastBuildDate>Tue, 01 Jun 2010 14:53:32 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Hello World em JSF</title>
		<link>http://www.rodrigoaguas.com/blog/hello-world-em-jsf/</link>
		<comments>http://www.rodrigoaguas.com/blog/hello-world-em-jsf/#comments</comments>
		<pubDate>Tue, 01 Jun 2010 14:45:47 +0000</pubDate>
		<dc:creator>Rodrigo Aguas</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.rodrigoaguas.com/blog/?p=118</guid>
		<description><![CDATA[Diante da dificuldade de um amigo em encontrar na internet um tutorial que explicasse corretamente como desenvolver um simples &#8220;Hello World&#8221; utilizando JSF, ele resolveu me enviar o exemplo dele para que fosse publicado aqui. Obrigado Sérgio!
Nesse artigo, focarei no desenvolvimento do exemplo e não me aprofundarei em explicações sobre a utilização do JSF, para [...]]]></description>
			<content:encoded><![CDATA[<p>Diante da dificuldade de um amigo em encontrar na internet um tutorial que explicasse corretamente como desenvolver um simples &#8220;Hello World&#8221; utilizando JSF, ele resolveu me enviar o exemplo dele para que fosse publicado aqui. Obrigado Sérgio!</p>
<p>Nesse artigo, focarei no desenvolvimento do exemplo e não me aprofundarei em explicações sobre a utilização do JSF, para isso aconselho a leitura do <a href="http://java.sun.com/javaee/5/docs/tutorial/doc/bnaph.html">capítulo sobre JSF do tutorial Java EE</a> da Sun.</p>
<p>O JSF é um framework que roda no lado servidor da aplicação web e disponibiliza mecanismos ao desenvolvedor para facilitar, entre outros, o tratamento de eventos, validações no servidor, conversão de dados, navegação entre páginas e internacionalização da aplicação.</p>
<p>O funcionamento mais simples a ser entendido do JSF é que ele vincula os componentes de tela aos dados no lado servidor. De forma que ao ser digitado um texto numa caixa da tela, aquele texto será &#8220;automaticamente&#8221; copiado para um atributo da sua classe controladora, chamada de <a href="http://java.sun.com/javaee/5/docs/tutorial/doc/bnaqm.html">backing bean</a>. Assim como os itens de um elemento <a href="http://www.w3schools.com/tags/tag_select.asp">select</a> do html podem ser gerados com base em uma lista que está armazenada no seu backing bean. Para possibilitar esse funcionamento precisamos utilizar as <a href="http://www.exadel.com/tutorial/jsf/jsftags-guide.html">tags JSF</a> no lugar das tags HTML em nossas páginas, o que não traz grandes dificuldades já que existe claramente uma relação de um-para-um entre elas.</p>
<p>Vou parar as explicações por aqui para irmos para o lado prático. Antes de mais nada, é necessário <a href="http://www.rodrigoaguas.com/blog/configurando-projeto-jsf-no-eclipse/">criar um projeto JSF</a> para utilizarmos. Além disso, criaremos algumas páginas JSP, um backing bean para controlar nossa tela, regras de navegação e um arquivo de propriedades com os textos utilizados. Segue o passo-a-passo para desenvolver o Hello World em JSF:</p>
<p>1- Criar um arquivo &#8220;index.jsp&#8221; na pasta &#8220;WebContent&#8221; com o conteúdo abaixo. Toda aplicação JSF precisa de um página inicial que redirecione para uma url do jsf.</p>
<div class="codecolorer-container html4strict default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br /></div></td><td><div class="html4strict codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">html</span>&gt;</span><br />
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">body</span>&gt;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&lt;jsp:forward page<span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;/formulario.jsf&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span><br />
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">body</span>&gt;</span><br />
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">html</span>&gt;</span></div></td></tr></tbody></table></div>
<p>2- Criar a classe &#8220;PessoaBean&#8221; abaixo no pacote &#8220;helloworld&#8221;. Essa classe será o nosso backing bean.</p>
<div class="codecolorer-container java5 default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br /></div></td><td><div class="java5 codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">package</span> <span style="color: #006699;">helloworld</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> PessoaBean <span style="color: #009900;">&#123;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #003399; font-weight: bold;">String</span> nome = <span style="color: #0000ff;">&quot;&quot;</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399; font-weight: bold;">String</span> getNome<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">return</span> nome<span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #006600; font-weight: bold;">void</span> setNome<span style="color: #009900;">&#40;</span><span style="color: #003399; font-weight: bold;">String</span> nome<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">nome</span> = nome<span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<p>3- Acrescentar no arquivo &#8220;faces-config.xml&#8221; o seguinte elemento. Essa é a declaração do nosso backing bean. Nas telas faremos referência a ele utilizando o nome &#8220;pessoaBean&#8221; que demos ao mesmo. Também definimos que o escopo dele será de requisição.</p>
<div class="codecolorer-container xml default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br /></div></td><td><div class="xml codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;managed-bean<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;managed-bean-name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>pessoaBean<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/managed-bean-name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;managed-bean-class<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>helloworld.PessoaBean<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/managed-bean-class<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;managed-bean-scope<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>request<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/managed-bean-scope<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/managed-bean<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></div></td></tr></tbody></table></div>
<p>4- Criar a página &#8220;formulario.jsp&#8221; na pasta &#8220;WebContent&#8221; com o conteúdo abaixo. Nela utilizamos a tag loadBundle para carregar um arquivo de propriedades com as mensagens a serem exibidas ao usuário e utilizamos a variável &#8220;msg&#8221; para referenciar tal arquivo no conteúdo da página. As outras tags utilizadas servem para exibir texto, criar uma caixa de entrada de texto e criar um botão.</p>
<div class="codecolorer-container html4strict default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br /></div></td><td><div class="html4strict codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #009900;">&lt;%@ taglib uri<span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;http://java.sun.com/jsf/html&quot;</span> prefix<span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;h&quot;</span>%&gt;</span><br />
<span style="color: #009900;">&lt;%@ taglib uri<span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;http://java.sun.com/jsf/core&quot;</span> prefix<span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;f&quot;</span>%&gt;</span><br />
<br />
<span style="color: #009900;">&lt;f:loadBundle basename<span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;helloworld.mensagens&quot;</span> var<span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;msg&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span><br />
<br />
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">html</span>&gt;</span><br />
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">head</span>&gt;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">meta</span> <span style="color: #000066;">http-equiv</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;Content-Type&quot;</span> <span style="color: #000066;">content</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;text/html; charset=ISO-8859-1&quot;</span>&gt;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">title</span>&gt;</span>rodrigoaguas.com<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">title</span>&gt;</span><br />
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">head</span>&gt;</span><br />
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">body</span>&gt;</span><br />
<span style="color: #009900;">&lt;f:view&gt;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">h1</span>&gt;&lt;h:outputText <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;#{msg.titulo}&quot;</span> <span style="color: #66cc66;">/</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">h1</span>&gt;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #009900;">&lt;h:form&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&lt;h:outputText <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;#{msg.pergunta}&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&lt;h:inputText <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;#{pessoaBean.nome}&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&lt;h:commandButton <span style="color: #000066;">action</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;bemvindo&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;#{msg.botao}&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span>h:form&gt;</span><br />
&nbsp; &nbsp; <br />
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span>f:view&gt;</span><br />
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">body</span>&gt;</span><br />
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">html</span>&gt;</span></div></td></tr></tbody></table></div>
<p>5- Criar o arquivo &#8220;mensagens.properties&#8221; no pacote &#8220;helloworld&#8221; com o seguinte conteúdo:</p>
<div class="codecolorer-container properties default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br /></div></td><td><div class="properties codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000080; font-weight:bold;">pergunta</span> <span style="color: #000000;">=</span><span style="color: #008000; font-weight:bold;"> Qual é o seu nome?</span><br />
<span style="color: #000080; font-weight:bold;">botao</span> <span style="color: #000000;">=</span><span style="color: #008000; font-weight:bold;"> Fale Comigo</span><br />
<span style="color: #000080; font-weight:bold;">titulo</span> <span style="color: #000000;">=</span><span style="color: #008000; font-weight:bold;"> Olá Mundo!</span><br />
<span style="color: #000080; font-weight:bold;">boasvindas</span> <span style="color: #000000;">=</span><span style="color: #008000; font-weight:bold;"> Seja bem vindo ao jsf</span></div></td></tr></tbody></table></div>
<p>6- Para fazermos o usuário ser encaminhado para outra página quando apertar o botão, precisamos acrescentar a regra de navegação abaixo no &#8220;faces-config.xml&#8221;.</p>
<div class="codecolorer-container xml default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br /></div></td><td><div class="xml codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;navigation-rule<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;from-view-id<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>/formulario.jsp<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/from-view-id<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;navigation-case<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;from-outcome<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>bemvindo<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/from-outcome<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;to-view-id<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>/saudacoes.jsp<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/to-view-id<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/navigation-case<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/navigation-rule<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></div></td></tr></tbody></table></div>
<p>Assim, nosso arquivo &#8220;faces-config.xml&#8221; completo fica da seguinte forma:</p>
<div class="codecolorer-container xml default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br /></div></td><td><div class="xml codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;?xml</span> <span style="color: #000066;">version</span>=<span style="color: #ff0000;">&quot;1.0&quot;</span> <span style="color: #000066;">encoding</span>=<span style="color: #ff0000;">&quot;UTF-8&quot;</span><span style="color: #000000; font-weight: bold;">?&gt;</span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;faces-config</span> <span style="color: #000066;">version</span>=<span style="color: #ff0000;">&quot;1.2&quot;</span> <span style="color: #000066;">xmlns</span>=<span style="color: #ff0000;">&quot;http://java.sun.com/xml/ns/javaee&quot;</span></span><br />
<span style="color: #009900;">&nbsp; &nbsp; <span style="color: #000066;">xmlns:xi</span>=<span style="color: #ff0000;">&quot;http://www.w3.org/2001/XInclude&quot;</span> <span style="color: #000066;">xmlns:xsi</span>=<span style="color: #ff0000;">&quot;http://www.w3.org/2001/XMLSchema-instance&quot;</span></span><br />
<span style="color: #009900;">&nbsp; &nbsp; <span style="color: #000066;">xsi:schemaLocation</span>=<span style="color: #ff0000;">&quot;http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span><br />
<br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;managed-bean<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;managed-bean-name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>pessoaBean<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/managed-bean-name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;managed-bean-class<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>helloworld.PessoaBean<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/managed-bean-class<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;managed-bean-scope<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>request<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/managed-bean-scope<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/managed-bean<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;navigation-rule<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;from-view-id<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>/formulario.jsp<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/from-view-id<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;navigation-case<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;from-outcome<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>bemvindo<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/from-outcome<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;to-view-id<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>/saudacoes.jsp<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/to-view-id<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/navigation-case<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/navigation-rule<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/faces-config<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></div></td></tr></tbody></table></div>
<p>7- Nosso último passo é criar a página &#8220;saudacoes.jsp&#8221; na pasta &#8220;WebContent&#8221;. Essa página será exibida após o visitante ter digitado o nome e apertado o botão no formulário da outra página.</p>
<div class="codecolorer-container html4strict default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br /></div></td><td><div class="html4strict codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #009900;">&lt;%@ taglib uri<span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;http://java.sun.com/jsf/html&quot;</span> prefix<span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;h&quot;</span>%&gt;</span><br />
<span style="color: #009900;">&lt;%@ taglib uri<span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;http://java.sun.com/jsf/core&quot;</span> prefix<span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;f&quot;</span>%&gt;</span><br />
<br />
<span style="color: #009900;">&lt;f:loadBundle basename<span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;helloworld.mensagens&quot;</span> var<span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;msg&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span><br />
<br />
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">html</span>&gt;</span><br />
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">head</span>&gt;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">title</span>&gt;</span>rodrigoaguas.com<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">title</span>&gt;</span><br />
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">head</span>&gt;</span><br />
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">body</span>&gt;</span><br />
<span style="color: #009900;">&lt;f:view&gt;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">h3</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&lt;h:outputText <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;#{msg.boasvindas}&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&lt;h:outputText <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;#{pessoaBean.nome}&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>!<br />
&nbsp; &nbsp; <span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">h3</span>&gt;</span><br />
&nbsp; &nbsp; <br />
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span>f:view&gt;</span><br />
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">body</span>&gt;</span><br />
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">html</span>&gt;</span></div></td></tr></tbody></table></div>
<p>Pronto! Agora basta dar deploy em um servidor. Lembrando que o eclipse tem integração com o <a href="http://tomcat.apache.org/">Tomcat</a> e o <a href="http://www.jboss.org/jbossas/">JBoss</a>, bastando para dar deploy neles clicar com o botão direito do mouse na pasta do projeto, depois ir em &#8220;Run As&#8221;, depois &#8220;Run on Server&#8221;, selecionar o servidor e clicar em &#8220;Finish&#8221;.</p>
<p>Depois de feito o deploy, acesse <a href="http://localhost:8080/hello/">http://localhost:8080/hello/</a> para ver sua aplicação funcionando.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rodrigoaguas.com/blog/hello-world-em-jsf/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tutorial básico de JQuery</title>
		<link>http://www.rodrigoaguas.com/blog/tutorial-basico-de-jquery/</link>
		<comments>http://www.rodrigoaguas.com/blog/tutorial-basico-de-jquery/#comments</comments>
		<pubDate>Sat, 01 May 2010 12:30:18 +0000</pubDate>
		<dc:creator>Rodrigo Aguas</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Javascript]]></category>

		<guid isPermaLink="false">http://www.rodrigoaguas.com/blog/?p=90</guid>
		<description><![CDATA[O JQuery é uma biblioteca Javascript que simplifica extremamente a utilização de ajax, animações, tratamento de eventos e manipulação de elementos html em sites. A forma como se utiliza JQuery é um pouco diferente do que estamos acostumados no Javascript, mas essa mudança trouxe uma simplicidade incrível e compensa qualquer esforço necessário em seu aprendizado.
Uma [...]]]></description>
			<content:encoded><![CDATA[<p>O <a href="http://jquery.com/">JQuery</a> é uma biblioteca Javascript que simplifica extremamente a utilização de ajax, animações, tratamento de eventos e manipulação de elementos html em sites. A forma como se utiliza JQuery é um pouco diferente do que estamos acostumados no Javascript, mas essa mudança trouxe uma simplicidade incrível e compensa qualquer esforço necessário em seu aprendizado.</p>
<p>Uma instrução JQuery é composta por um <a href="http://api.jquery.com/category/selectors/">seletor</a> e um conjunto de operações a serem executadas nos elementos encontrados baseando-se no seletor. O seletor segue uma sintaxe muito parecida com a do <a href="http://www.w3schools.com/css/">CSS</a>, acrescentando a esta alguns recursos. As operações disponíveis são tão variadas que é difícil conhecer todas, alguns exemplos são: acrescentar classe, alterar valor de atributo, replicar elemento, esvaziar conteúdo de um elemento, remover elementos da página, aplicar animações (como fade in e fade out), fazer requisições ajax, etc, etc, etc&#8230; Uma lista completa da API pode ser encontrada na <a href="http://docs.jquery.com/Main_Page">documentação do JQuery</a>. O trecho de código abaixo não é funcional, tem como objetivo apenas ilustrar as explicações dadas.</p>
<div class="codecolorer-container javascript default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">$<span style="color: #009900;">&#40;</span> SELETOR <span style="color: #009900;">&#41;</span>.<span style="color: #660066;">operacao</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>A palavra SELETOR está representando uma expressão utilizada para encontrar o conjunto de elementos da página que receberão a operação em questão. Ainda ilustrativamente, é comum o uso abaixo, quando são utilizadas diversas operações em um mesmo conjunto de elementos selecionados.</p>
<div class="codecolorer-container javascript default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">$<span style="color: #009900;">&#40;</span> SELETOR <span style="color: #009900;">&#41;</span>.<span style="color: #660066;">operacao1</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">operacao2</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">operacao3</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>Antes de colocar as mão na massa é necessário importar o arquivo do JQuery colocando o seguinte código no elemento head da sua página:</p>
<div class="codecolorer-container html4strict default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="html4strict codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">script</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;text/javascript&quot;</span> <span style="color: #000066;">src</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;http://code.jquery.com/jquery-1.4.2.min.js&quot;</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">script</span>&gt;</span></div></td></tr></tbody></table></div>
<p>Nosso primeiro exemplo não é muito interessante, mas explicará uma prática necessária na maioria dos códigos JQuery, e, como não poderia deixar de ser, será o famoso &#8220;Hello World&#8221;.</p>
<div class="codecolorer-container javascript default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br /></div></td><td><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">$<span style="color: #009900;">&#40;</span>document<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">ready</span><span style="color: #009900;">&#40;</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; window.<span style="color: #000066;">alert</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;Ola Mundo!&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>Você deve estar se perguntando que raios de Hello World complicado é esse e lhe dou razão, mas logo logo ficará mais claro. O que anteriormente chamei de seletor é sempre passado como parametro da função $, nesse caso estamos passando &#8216;document&#8217;, ou seja o elemento selecionado é o documento html. A operação utilizada é a &#8216;ready&#8217;, que serve para definir uma função a ser executada quando o documento está pronto (acabou de ser carregado, processado e exibido pelo navegador). Então, passamos como parametro da operação &#8216;ready&#8217; uma função que exibirá uma janela alert. Os códigos JQuery a serem executados quando a página for carregada devem estar sempre dentro dessa função no código anterior, ou seja:</p>
<div class="codecolorer-container javascript default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br /></div></td><td><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">$<span style="color: #009900;">&#40;</span>document<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">ready</span><span style="color: #009900;">&#40;</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #006600; font-style: italic;">// Código a ser executado na carga da página aqui!</span><br />
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>Agora estamos prontos para exemplos mais interessantes! No próximo exemplo colocaremos uma tabela com as cores de fundo das linhas alternadas, nos basearemos no seguinte trecho de código html:</p>
<div class="codecolorer-container html4strict default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br /></div></td><td><div class="html4strict codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">table</span> <span style="color: #000066;">id</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;listrada&quot;</span>&gt;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">tr</span>&gt;&lt;<span style="color: #000000; font-weight: bold;">td</span>&gt;</span>Nome:<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">td</span>&gt;&lt;<span style="color: #000000; font-weight: bold;">td</span>&gt;</span>Joãozinho<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">td</span>&gt;&lt;\tr&gt;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">tr</span>&gt;&lt;<span style="color: #000000; font-weight: bold;">td</span>&gt;</span>Idade:<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">td</span>&gt;&lt;<span style="color: #000000; font-weight: bold;">td</span>&gt;</span>10<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">td</span>&gt;&lt;\tr&gt;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">tr</span>&gt;&lt;<span style="color: #000000; font-weight: bold;">td</span>&gt;</span>Sexo:<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">td</span>&gt;&lt;<span style="color: #000000; font-weight: bold;">td</span>&gt;</span>Masculino<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">td</span>&gt;&lt;\tr&gt;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">tr</span>&gt;&lt;<span style="color: #000000; font-weight: bold;">td</span>&gt;</span>Pai:<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">td</span>&gt;&lt;<span style="color: #000000; font-weight: bold;">td</span>&gt;</span>Desconhecido<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">td</span>&gt;&lt;\tr&gt;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">tr</span>&gt;&lt;<span style="color: #000000; font-weight: bold;">td</span>&gt;</span>Mae:<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">td</span>&gt;&lt;<span style="color: #000000; font-weight: bold;">td</span>&gt;</span>Maria<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">td</span>&gt;&lt;\tr&gt;</span><br />
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">table</span>&gt;</span></div></td></tr></tbody></table></div>
<p>A lógica que utilizaremos é selecionar primeiro os filhos do elemento identificado por &#8216;listrada&#8217; que estejam nas posições pares e definir uma cor de fundo azul para eles:</p>
<div class="codecolorer-container javascript default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#listrada&gt;*:even&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">css</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;background-color&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;#0000FF&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>Em seguida selecionamos os filhos do elemento identificado por &#8216;listrada&#8217; que estejam nas posições impares e definimos uma cor de fundo verde para os mesmos:</p>
<div class="codecolorer-container javascript default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#listrada&gt;*:odd&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">css</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;background-color&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;#00FF00&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>Como não podemos esquecer do nosso primeiro exemplo, a versão final do código para a tabela listrada fica assim:</p>
<div class="codecolorer-container javascript default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br /></div></td><td><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">$<span style="color: #009900;">&#40;</span>document<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">ready</span><span style="color: #009900;">&#40;</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#listrada&gt;*:even&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">css</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;background-color&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;#0000FF&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#listrada&gt;*:odd&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">css</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;background-color&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;#00FF00&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>Se preferirmos não colocar estilo diretamente no Javascript, podemos definir estilos no css para as linhas usando classes e alterar o nosso código da seguinte maneira:</p>
<div class="codecolorer-container javascript default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br /></div></td><td><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">$<span style="color: #009900;">&#40;</span>document<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">ready</span><span style="color: #009900;">&#40;</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#listrada&gt;*:even&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">addClass</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;linhaAzul&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#listrada&gt;*:odd&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">addClass</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;linhaVerde&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>O próximo exemplo aprofunda as explicações sobre <a href="http://api.jquery.com/category/events/">manipulação de eventos</a> dos elementos. Colocaremos em todos os links de uma página qualquer uma janela alert sendo exibida ao usuário quando o mesmo clica sobre o link.</p>
<div class="codecolorer-container javascript default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br /></div></td><td><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">$<span style="color: #009900;">&#40;</span>document<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">ready</span><span style="color: #009900;">&#40;</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;a&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">click</span><span style="color: #009900;">&#40;</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; window.<span style="color: #000066;">alert</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;Atenção: você está saindo do site rodrigoaguas.com.&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>O seletor desse exemplo é bem simples, pesquisa por qualquer elemento A do documento html. Então, adiciona aos eventos onclick de todos os elementos selecionados uma chamada para a função que exibe a janela alert. Agora vamos melhorar o nosso código para impedir que a ação padrão do evento seja executada, para isso acrescentaremos um parametro à nossa função para receber um objeto que representa o evento.</p>
<div class="codecolorer-container javascript default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br /></div></td><td><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">$<span style="color: #009900;">&#40;</span>document<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">ready</span><span style="color: #009900;">&#40;</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;a&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">click</span><span style="color: #009900;">&#40;</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>evento<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; window.<span style="color: #000066;">alert</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;Atenção: você está tentando sair do site rodrigoaguas.com, mas não vai conseguir.&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; evento.<span style="color: #660066;">preventDefault</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>Depois de ser impedido de sair do site, queremos que o nosso usuário fique impedido de clicar novamente no link, para isso faremos uma animação de Fade Out no link clicado e ele deixará de ser exibido. Precisaremos utilizar o seletor &#8216;this&#8217; que representa o elemento onde o evento foi disparado.</p>
<div class="codecolorer-container javascript default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br /></div></td><td><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">$<span style="color: #009900;">&#40;</span>document<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">ready</span><span style="color: #009900;">&#40;</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;a&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">click</span><span style="color: #009900;">&#40;</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>evento<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; window.<span style="color: #000066;">alert</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;Atenção: você está tentando sair do site rodrigoaguas.com, mas não vai conseguir.&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; $<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">fadeOut</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; evento.<span style="color: #660066;">preventDefault</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>Nesse tutorial foram tratados os aspectos básicos do JQuery como importação do arquivo da biblioteca, seletores, alteração de estilo, acrescentar classes, manipulação de eventos e animações. Tratarei de Ajax posteriormente em outro tutorial. Abraços!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rodrigoaguas.com/blog/tutorial-basico-de-jquery/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Configurando Facelets em projeto JSF no eclipse</title>
		<link>http://www.rodrigoaguas.com/blog/configurando-facelets-em-projeto-jsf-no-eclipse/</link>
		<comments>http://www.rodrigoaguas.com/blog/configurando-facelets-em-projeto-jsf-no-eclipse/#comments</comments>
		<pubDate>Thu, 11 Feb 2010 01:42:26 +0000</pubDate>
		<dc:creator>Rodrigo Aguas</dc:creator>
				<category><![CDATA[JSF]]></category>
		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://www.rodrigoaguas.com/blog/?p=66</guid>
		<description><![CDATA[Após termos nosso projeto JavaServer Faces criado no eclipse, iremos configurar o facelets no mesmo. O facelets é um framework de templating feito específicamente para projetos JSF. Ele se integra de tal forma com o ciclo de vida do jsf que resulta numa melhora da performance significativa em comparação ao uso de JSP. Além disso, [...]]]></description>
			<content:encoded><![CDATA[<p>Após termos nosso <a href="http://www.rodrigoaguas.com/blog/configurando-projeto-jsf-no-eclipse/">projeto JavaServer Faces criado no eclipse</a>, iremos configurar o <a href="https://facelets.dev.java.net/">facelets</a> no mesmo. O facelets é um framework de templating feito específicamente para projetos JSF. Ele se integra de tal forma com o ciclo de vida do jsf que resulta numa melhora da performance significativa em comparação ao uso de JSP. Além disso, o facelets funciona em todos os web containers amplamente conhecidos, não impondo restrição alguma ao projeto.</p>
<p>1- Faça o download do facelets na <a href="https://facelets.dev.java.net/files/documents/3448/144240/facelets-1.1.15-jsf1.2.zip">versão 1.1.15</a>, pois a versão 1.2 não é estável (e parece que não ficará tão cedo);</p>
<p>2- Extraia o arquivo &#8220;jsf-facelets.jar&#8221; para dentro da pasta &#8220;WebContent\WEB-INF\lib&#8221; do seu projeto JSF. Como estamos utilizando o JBoss nesse exemplo, não é necessário extrair também os outros arquivos JAR da pasta lib do facelets, pois são dependências de bibliotecas que já existem no JBoss;</p>
<p>3- Não basta apenas acrescentarmos a biblioteca do facelets em nosso projeto, devemos configurar algumas outras coisas para que o JSF se integre ao facelets. Acrescente as seguintes linhas ao arquivo faces-config.xml (encontrado em &#8220;WebContent\WEB-INF&#8221;):</p>
<div class="codecolorer-container xml default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br /></div></td><td><div class="xml codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;application<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;view-handler<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>com.sun.facelets.FaceletViewHandler<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/view-handler<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/application<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></div></td></tr></tbody></table></div>
<p>4- E no mesmo local devemos incluir as seguintes linhas ao arquivo Web.xml:</p>
<div class="codecolorer-container xml default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br /></div></td><td><div class="xml codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;context-param<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;param-name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>javax.faces.DEFAULT_SUFFIX<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/param-name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;param-value<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>.htm<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/param-value<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/context-param<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;context-param<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;param-name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>facelets.DEVELOPMENT<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/param-name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;param-value<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>true<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/param-value<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/context-param<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;context-param<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;param-name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>facelets.SKIP_COMMENTS<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/param-name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;param-value<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>true<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/param-value<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/context-param<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;context-param<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;param-name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>com.sun.faces.validateXml<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/param-name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;param-value<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>true<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/param-value<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/context-param<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></div></td></tr></tbody></table></div>
<p>No primeiro parâmetro, indicamos que os arquivos físicos que utilizaremos para a apresentação tem extensão .htm.<br />
Dessa forma, quando o facelets receber uma requisição ao endereço &#8220;bemvindo.jsf&#8221; buscará pelo arquivo &#8220;bemvindo.htm&#8221;.<br />
Na prática, não importa a extensão escolhida, costuma-se deixar htm ou html apenas por questões históricas.</p>
<p>O segundo parâmetro indica ao facelets que estamos em ambiente de desenvolvimento, dessa forma ele exibe possíveis erros em uma tela amigável ao desenvolvedor, mas que não deve ser exibida futuramente ao usuário final.</p>
<p>O terceiro parâmetro determina ao facelets que os comentários nos códigos HTML devem ser tratados como comentários. Pois o facelets por padrão não ignora comentários (<!-- -->) nos arquivos de apresentação.</p>
<p>O quarto parâmetro faz com que o facelets valide o código html das telas, só permitindo que seja utilizado XHTML.</p>
<p>Pronto! Dessa forma o facelets já está pronto para ser executado em seu projeto.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rodrigoaguas.com/blog/configurando-facelets-em-projeto-jsf-no-eclipse/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Configurando Projeto JSF no Eclipse</title>
		<link>http://www.rodrigoaguas.com/blog/configurando-projeto-jsf-no-eclipse/</link>
		<comments>http://www.rodrigoaguas.com/blog/configurando-projeto-jsf-no-eclipse/#comments</comments>
		<pubDate>Fri, 18 Dec 2009 21:26:23 +0000</pubDate>
		<dc:creator>Rodrigo Aguas</dc:creator>
				<category><![CDATA[JSF]]></category>
		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://www.rodrigoaguas.com/blog/configurando-projeto-jsf-no-eclipse/</guid>
		<description><![CDATA[Este tutorial explicará como criar um projeto Java para web utilizando JavaServer Faces (JSF) no Eclipse. É um passo-a-passo de todas as configurações necessárias para ter um projeto pronto para iniciar o desenvolvimento de sistemas web.
Os softwares utilizados serão o ambiente de desenvolvimento integrado Eclipse e o servidor de aplicação JBoss. Basearei as explicações nas [...]]]></description>
			<content:encoded><![CDATA[<p>Este tutorial explicará como criar um projeto Java para web utilizando JavaServer Faces (JSF) no Eclipse. É um passo-a-passo de todas as configurações necessárias para ter um projeto pronto para iniciar o desenvolvimento de sistemas web.</p>
<p>Os softwares utilizados serão o ambiente de desenvolvimento integrado <a href="http://www.eclipse.org/" target="_blank">Eclipse</a> e o servidor de aplicação <a href="http://www.jboss.org/jbossas/" target="_blank">JBoss</a>. Basearei as explicações nas versões mais recentes desses softwares no momento em que escrevo este tutorial, que são <a href="http://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/galileo/SR1/eclipse-jee-galileo-SR1-win32.zip">Eclipse Galileo SR1</a> e <a href="http://sourceforge.net/projects/jboss/files/JBoss/JBoss-5.1.0.GA/">JBoss 5.1.0.GA</a>, mas facilmente as explicações aqui lidas podem ser adaptadas às outras versões. A instalação dos mesmos não será tratada neste tutorial, então instale-os antes de prosseguir na leitura.</p>
<p>Então vamos à criação do projeto no Eclipse:</p>
<ol>
<li>Clique com o botão direito do mouse no interior da view &#8220;Project Explorer&#8221;;</li>
<li>Vá na opção &#8220;New&#8221;;</li>
<li>Clique em &#8220;Dynamic Web Project&#8221;, uma janela se abrir;<br />
<a title="TutorialJSF_1" href="http://www.rodrigoaguas.com/blog/wp-content/uploads/2009/12/untitled-1.jpg" target="_blank"><img src="http://www.rodrigoaguas.com/blog/wp-content/uploads/2009/12/untitled-1.thumbnail.jpg" alt="TutorialJSF_1" /></a></li>
<li>Dê um nome para o projeto no campo &#8220;Project Name&#8221;;</li>
<li>Na caixa &#8220;Target runtime&#8221;, clique no botão &#8220;New&#8221;, abrirá uma outra janela para configuração do servidor no Eclipse;</li>
<li>Selecione na pasta &#8220;JBoss&#8221; a versão &#8220;JBoss v5.0&#8243;;<br />
<a title="TutorialJSF_2" href="http://www.rodrigoaguas.com/blog/wp-content/uploads/2009/12/untitled-2.jpg" target="_blank"><img src="http://www.rodrigoaguas.com/blog/wp-content/uploads/2009/12/untitled-2.thumbnail.jpg" alt="TutorialJSF_2" /></a></li>
<li>Clique no botão &#8220;Next&#8221;;</li>
<li>Clique no botão &#8220;Browser&#8221; e selecione o local onde foi instalado o JBoss em seu computador;<br />
<a title="TutorialJSF_3" href="http://www.rodrigoaguas.com/blog/wp-content/uploads/2009/12/untitled-3.jpg" target="_blank"> <img src="http://www.rodrigoaguas.com/blog/wp-content/uploads/2009/12/untitled-3.thumbnail.jpg" alt="TutorialJSF_3" /></a></li>
<li>Clique em &#8220;Finish&#8221; e voltaremos para a janela de criação do projeto;</li>
<li>Confirme do campo &#8220;Dynamic web module version&#8221; estar selecionada a opção &#8220;2.5&#8243;;</li>
<li>Em &#8220;Configuration&#8221;, selecione a opção &#8220;JavaServer Faces v1.2 Project&#8221;;<br />
<a title="TutorialJSF_4" href="http://www.rodrigoaguas.com/blog/wp-content/uploads/2009/12/untitled-4.jpg" target="_blank"><img src="http://www.rodrigoaguas.com/blog/wp-content/uploads/2009/12/untitled-4.thumbnail.jpg" alt="TutorialJSF_4" /></a></li>
<li>Clique no botão &#8220;Next&#8221;, abrirá uma tela que não faremos nenhuma alteração;</li>
<li>Clique no botão &#8220;Next&#8221; novamente;<br />
<a title="TutorialJSF_5" href="http://www.rodrigoaguas.com/blog/wp-content/uploads/2009/12/untitled-5.jpg" target="_blank"><img src="http://www.rodrigoaguas.com/blog/wp-content/uploads/2009/12/untitled-5.thumbnail.jpg" alt="TutorialJSF_5" /></a></li>
<li>Confirme do marcador &#8220;Generate web.xml deployment descriptor&#8221; estar selecionado;<br />
<a title="TutorialJSF_6" href="http://www.rodrigoaguas.com/blog/wp-content/uploads/2009/12/untitled-6.jpg" target="_blank"><img src="http://www.rodrigoaguas.com/blog/wp-content/uploads/2009/12/untitled-6.thumbnail.jpg" alt="TutorialJSF_6" /></a></li>
<li>Clique no botão &#8220;Next&#8221; mais uma vez;<br />
<a title="TutorialJSF_7" href="http://www.rodrigoaguas.com/blog/wp-content/uploads/2009/12/untitled-7.jpg" target="_blank"> <img src="http://www.rodrigoaguas.com/blog/wp-content/uploads/2009/12/untitled-7.thumbnail.jpg" alt="TutorialJSF_7" /></a></li>
<li>Clique no botão &#8220;Finish&#8221;para efetivamente criar o projeto;<br />
<a title="TutorialJSF_8" href="http://www.rodrigoaguas.com/blog/wp-content/uploads/2009/12/untitled-8.jpg" target="_blank"> <img src="http://www.rodrigoaguas.com/blog/wp-content/uploads/2009/12/untitled-8.thumbnail.jpg" alt="TutorialJSF_8" /></a></li>
</ol>
<p>Pronto! Você está com seu projeto web criado.  No próximo tutorial ensinarei a instalar o <a href="https://facelets.dev.java.net/" target="_blank">Facelets</a>, pois <a href="http://www.rponte.com.br/2008/11/12/aplicacoes-serias-em-jsf-usam-facelets/" target="_blank">aplicações sérias em JSF usam Facelets</a>! Não percam!</p>
<p>Abraço!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rodrigoaguas.com/blog/configurando-projeto-jsf-no-eclipse/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Criação de Tabelas e Relacionamentos com SQL</title>
		<link>http://www.rodrigoaguas.com/blog/criacao-de-tabelas-e-relacionamentos-com-sql/</link>
		<comments>http://www.rodrigoaguas.com/blog/criacao-de-tabelas-e-relacionamentos-com-sql/#comments</comments>
		<pubDate>Fri, 17 Apr 2009 15:50:49 +0000</pubDate>
		<dc:creator>Rodrigo Aguas</dc:creator>
				<category><![CDATA[BD]]></category>

		<guid isPermaLink="false">http://www.rodrigoaguas.com/blog/criacao-de-tabelas-e-relacionamentos-com-sql/</guid>
		<description><![CDATA[Já escrevi sobre a criação de relacionamentos no MySQL anteriormente, então não serei repetitivo em falar sobre as mesmas coisas, mas aconselho a leitura do artigo anterior para os que não tiverem intimidade com relacionamentos de banco de dados.
Neste me concentrarei em mostrar a criação de relacionamentos utilizando apenas comandos SQL, não que isso dispense [...]]]></description>
			<content:encoded><![CDATA[<p>Já escrevi sobre a <a href="http://www.rodrigoaguas.com/blog/criando-relacionamentos-no-mysql/">criação de relacionamentos no MySQL</a> anteriormente, então não serei repetitivo em falar sobre as mesmas coisas, mas aconselho a leitura do artigo anterior para os que não tiverem intimidade com relacionamentos de banco de dados.</p>
<p>Neste me concentrarei em mostrar a criação de relacionamentos utilizando apenas comandos SQL, não que isso dispense a utilização de uma interface com o banco de dados para a execução dos mesmos. Para isso, podemos utilizar além do próprio <a href="http://dev.mysql.com/downloads/gui-tools/">MySQL Query Browser</a>, o <a href="http://www.phpmyadmin.net/" target="_blank">phpMyAdmin</a> ou outro programa de sua preferência que permita a execução de códigos SQL na base de dados.</p>
<p>Basearei minhas explicações em exemplos para a criação de um banco de dados para uma &#8220;biblioteca&#8221; (inventado apenas para nos servir de exemplo, então longe de ser completo o suficiente para uma aplicação real). Iniciaremos, criando a tabela de autores, contendo o nome do mesmo e um identificador:</p>
<div class="codecolorer-container sql default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br /></div></td><td><div class="sql codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #993333; font-weight: bold;">CREATE</span> <span style="color: #993333; font-weight: bold;">TABLE</span> autor <span style="color: #66cc66;">&#40;</span><br />
id int<span style="color: #66cc66;">,</span><br />
nome varchar<br />
<span style="color: #66cc66;">&#41;</span></div></td></tr></tbody></table></div>
<p>No código anterior contemplamos apenas a estrutura da tabela, ignorando a definição da chave primária e dos campos que não aceitam valores nulos. Então, colocaremos o id como chave primária (primary key, ou apenas pk) e auto incrementada, para que o seu valor seja gerado pelo próprio MySQL. Além disso, o campo nome passa a não aceitar valores nulos, pois o padrão é que qualquer coluna aceite valores nulos. Existem outras sintaxes para esse comando, mas mostrarei apenas a que considero mais simples (mas não possibilita a criação de chaves compostas).</p>
<div class="codecolorer-container sql default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br /></div></td><td><div class="sql codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #993333; font-weight: bold;">CREATE</span> <span style="color: #993333; font-weight: bold;">TABLE</span> autor <span style="color: #66cc66;">&#40;</span><br />
id int <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">NULL</span> <span style="color: #993333; font-weight: bold;">AUTO_INCREMENT</span> <span style="color: #993333; font-weight: bold;">PRIMARY</span> <span style="color: #993333; font-weight: bold;">KEY</span><span style="color: #66cc66;">,</span><br />
nome varchar <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">NULL</span><br />
<span style="color: #66cc66;">&#41;</span></div></td></tr></tbody></table></div>
<p>Então, nossa tabela de autores está pronta. Criaremos agora a tabela de livros. Para simplificar, considerarei que um livro será escrito por apenas um autor, assim teremos que cada livro fará referência a exato um registro da tabela de autores. Armazenaremos, além do autor, apenas ISBN, título e edição do livro.</p>
<div class="codecolorer-container sql default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br /></div></td><td><div class="sql codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #993333; font-weight: bold;">CREATE</span> <span style="color: #993333; font-weight: bold;">TABLE</span> livro <span style="color: #66cc66;">&#40;</span><br />
id int <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">NULL</span> <span style="color: #993333; font-weight: bold;">AUTO_INCREMENT</span> <span style="color: #993333; font-weight: bold;">PRIMARY</span> <span style="color: #993333; font-weight: bold;">KEY</span><span style="color: #66cc66;">,</span><br />
isbn int <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">NULL</span><span style="color: #66cc66;">,</span><br />
titulo varchar <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">NULL</span><span style="color: #66cc66;">,</span><br />
edicao int <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">NULL</span><br />
<span style="color: #66cc66;">&#41;</span></div></td></tr></tbody></table></div>
<p>Já que o ISBN é um identificador único para as edições dos livros, poderíamos utilizá-lo como chave primária, mas não faremos isso, apenas não aceitaremos valores repetidos no ISBN, para isso utilizaremos unique nessa coluna. Além disso, temos ainda que criar uma coluna para o relacionamento com a tabela de autores e constraint de chave estrangeira (foreign key, ou apenas fk).</p>
<div class="codecolorer-container sql default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br /></div></td><td><div class="sql codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #993333; font-weight: bold;">CREATE</span> <span style="color: #993333; font-weight: bold;">TABLE</span> livro <span style="color: #66cc66;">&#40;</span><br />
id int <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">NULL</span> <span style="color: #993333; font-weight: bold;">AUTO_INCREMENT</span> <span style="color: #993333; font-weight: bold;">PRIMARY</span> <span style="color: #993333; font-weight: bold;">KEY</span><span style="color: #66cc66;">,</span><br />
isbn int <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">NULL</span> <span style="color: #993333; font-weight: bold;">UNIQUE</span><span style="color: #66cc66;">,</span><br />
titulo varchar <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">NULL</span><span style="color: #66cc66;">,</span><br />
edicao int <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">NULL</span><span style="color: #66cc66;">,</span><br />
autor int <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">NULL</span><br />
constraint fk_autor <span style="color: #993333; font-weight: bold;">FOREIGN</span> <span style="color: #993333; font-weight: bold;">KEY</span> <span style="color: #66cc66;">&#40;</span>id<span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">REFERENCES</span> autor<span style="color: #66cc66;">&#40;</span>id<span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">ON</span> <span style="color: #993333; font-weight: bold;">DELETE</span> restrict <span style="color: #993333; font-weight: bold;">ON</span> <span style="color: #993333; font-weight: bold;">UPDATE</span> restrict<br />
<span style="color: #66cc66;">&#41;</span><br />
engine <span style="color: #66cc66;">=</span> InnoDB</div></td></tr></tbody></table></div>
<p>Não comentei sobre a última linha do comando, ela determina o tipo de tabela que o MySQL criará. É necessário acrescentá-la por causa da foreign key, que não é suportada por qualquer tipo de tabela.</p>
<p>A criação das tabelas de autor e livro já foram suficientes para mostrar o básico da sintaxe de criação de tabela e já temos um (mini) banco de dados funcionando. Existem muitos detalhes que não foram comentados nesse artigo, quem quiser pode encontrá-los na <a href="http://dev.mysql.com/doc/refman/5.1/en/create-table.html">documentação do MySQL</a>.</p>
<p>Espero ter respondido aos pedidos feitos nos comentários do outro artigo. Abraços!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rodrigoaguas.com/blog/criacao-de-tabelas-e-relacionamentos-com-sql/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Explorar nichos na web? Será?</title>
		<link>http://www.rodrigoaguas.com/blog/explorar-nichos-na-web-sera/</link>
		<comments>http://www.rodrigoaguas.com/blog/explorar-nichos-na-web-sera/#comments</comments>
		<pubDate>Thu, 15 May 2008 02:47:50 +0000</pubDate>
		<dc:creator>Rodrigo Aguas</dc:creator>
				<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://www.rodrigoaguas.com/blog/explorar-nichos-na-web-sera/</guid>
		<description><![CDATA[O Google tempos atrás vem inserindo (lentamente) uma nova versão do Gmail, aos poucos os usuários foram recebendo o acesso à ela. Uma das justificativas desse método é que caso algum problema seja encontrado, não terá atingido todos os usuários do serviço, não queimando a imagem da empresa e nem nos prejudicando. Muito interessante.
Mas eu [...]]]></description>
			<content:encoded><![CDATA[<p>O Google tempos atrás vem inserindo (lentamente) uma nova versão do Gmail, aos poucos os usuários foram recebendo o acesso à ela. Uma das justificativas desse método é que caso algum problema seja encontrado, não terá atingido todos os usuários do serviço, não queimando a imagem da empresa e nem nos prejudicando. Muito interessante.</p>
<p>Mas eu não sei se o Google ainda não percebeu ou está ignorando que essa nova versão do Gmail TRAVA o Firefox a todo momento. Seria isso uma falha da Mozilla no desenvolvimento do Firefox? A culpa já foi até posta no Firebug (o próprio Gmail lhe avisa), mas mesmo com o Firebug desabilitado o problema continua.</p>
<p>Mas calma! Basta clicar em &#8220;Versão Mais Antiga&#8221; e utilizaremos o velho e bom Gmail! Mas não se empolgue, essa configuração não fica salva no computador, então toda vez que formos ler emails teremos que clicar no &#8220;Versão Mais Antiga&#8221;. Provavelmente, o Google não deixará tal versão disponível por muito tempo aos usuários, só espero que até lá resolvam o problema do Firefox.</p>
<p>Além disso, os usuários do ainda popular Internet Explorer 6 estão também excluídos da utilização dessa recente atualização. Será que os computadores deles não aguentariam o processamento necessário? É.. acho que o meu também não deve estar aguentando&#8230;</p>
<p>Sendo o Google a empresa símbolo da &#8220;Web 2.0&#8243;, estaria ela dando um passo atrás e focando nas grandes massas? A minoria que fique com o Gmail 1.0 mesmo!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rodrigoaguas.com/blog/explorar-nichos-na-web-sera/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Presente da Nielsen Norman Group: guia de acessibilidade</title>
		<link>http://www.rodrigoaguas.com/blog/presente-da-nielsen-norman-group-guia-de-acessibilidade/</link>
		<comments>http://www.rodrigoaguas.com/blog/presente-da-nielsen-norman-group-guia-de-acessibilidade/#comments</comments>
		<pubDate>Wed, 09 Jan 2008 01:32:50 +0000</pubDate>
		<dc:creator>Rodrigo Aguas</dc:creator>
				<category><![CDATA[Acessibilidade]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://www.rodrigoaguas.com/blog/presente-da-nielsen-norman-group-guia-de-acessibilidade/</guid>
		<description><![CDATA[A Nielsen Norman Group está disponibilizando gratuitamente um relatório sobre acessibilidade na Web denominado &#8220;Beyond ALT Text: Making the Web Easy to Use for Users With Disabilities&#8221;. O download do mesmo está disponível por tempo indeterminado como presente de final de ano. Nele existe um guia de boas práticas abordando muitos aspectos interessantes da acessibilidade, [...]]]></description>
			<content:encoded><![CDATA[<p>A Nielsen Norman Group está disponibilizando gratuitamente um relatório sobre acessibilidade na Web denominado &#8220;Beyond ALT Text: Making the Web Easy to Use for Users With Disabilities&#8221;. O <a href="http://www.nngroup.com/reports/accessibility/">download</a> do mesmo está disponível por tempo indeterminado como presente de final de ano. Nele existe um guia de boas práticas abordando muitos aspectos interessantes da acessibilidade, além de falar das tecnologias assistivas, leitores de telas e etc. Aproveitem enquanto é free!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rodrigoaguas.com/blog/presente-da-nielsen-norman-group-guia-de-acessibilidade/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Estatísticas da Mega-sena, ficaremos ricos?</title>
		<link>http://www.rodrigoaguas.com/blog/estatisticas-da-mega-sena-ficaremos-ricos/</link>
		<comments>http://www.rodrigoaguas.com/blog/estatisticas-da-mega-sena-ficaremos-ricos/#comments</comments>
		<pubDate>Tue, 08 Jan 2008 03:47:25 +0000</pubDate>
		<dc:creator>Rodrigo Aguas</dc:creator>
				<category><![CDATA[Geral]]></category>

		<guid isPermaLink="false">http://www.rodrigoaguas.com/blog/estatisticas-da-mega-sena-ficaremos-ricos/</guid>
		<description><![CDATA[Estava cansado de só dar vexame jogando na Mega-sena, então resolvi fazer algo para aumentar minhas chances de lucro. Como sei que meus milhares de leitores (rsrsrs) vão se lembrar de mim quando ganharem, estou divulgando esses gráficos/análises dos resultados da Mega-sena durante toda a história dela. Acessando os gráficos vocês terão essa ótima oportunidade [...]]]></description>
			<content:encoded><![CDATA[<p>Estava cansado de só dar vexame jogando na Mega-sena, então resolvi fazer algo para aumentar minhas chances de lucro. Como sei que meus milhares de leitores (rsrsrs) vão se lembrar de mim quando ganharem, estou divulgando esses gráficos/análises dos resultados da Mega-sena durante toda a história dela. Acessando os <a href="http://www.rodrigoaguas.com/mega.php">gráficos</a> vocês terão essa ótima oportunidade de grandes lucros! Huahauhau. Afinal, a esperança é a última que morre! E eu continuo tentando ganhar meus milhõeszinhos&#8230; Abraços!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rodrigoaguas.com/blog/estatisticas-da-mega-sena-ficaremos-ricos/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Atualização do passo-a-passo de como criar relacionamentos no MySQL</title>
		<link>http://www.rodrigoaguas.com/blog/atualizacao-do-passo-a-passo-de-como-criar-relacionamentos-no-mysql/</link>
		<comments>http://www.rodrigoaguas.com/blog/atualizacao-do-passo-a-passo-de-como-criar-relacionamentos-no-mysql/#comments</comments>
		<pubDate>Tue, 08 Jan 2008 03:31:48 +0000</pubDate>
		<dc:creator>Rodrigo Aguas</dc:creator>
				<category><![CDATA[BD]]></category>

		<guid isPermaLink="false">http://www.rodrigoaguas.com/blog/atualizacao-do-passo-a-passo-de-como-criar-relacionamentos-no-mysql/</guid>
		<description><![CDATA[Observando o grande número de acessos ao artigo de criação de relacionamentos no MySQL, resolvi dar uma melhorada nele acrescentando imagens das telas dos passos indicando a posição de cada ação necessária.  Acho que vale a pena aos que se interessam sobre o assunto dar uma olhada. Abraços!
]]></description>
			<content:encoded><![CDATA[<p>Observando o grande número de acessos ao <a href="http://www.rodrigoaguas.com/blog/criando-relacionamentos-no-mysql/">artigo de criação de relacionamentos no MySQL</a>, resolvi dar uma melhorada nele acrescentando imagens das telas dos passos indicando a posição de cada ação necessária.  Acho que vale a pena aos que se interessam sobre o assunto dar uma olhada. Abraços!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rodrigoaguas.com/blog/atualizacao-do-passo-a-passo-de-como-criar-relacionamentos-no-mysql/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>As melhores extensões do Firefox para desenvolvedores Web</title>
		<link>http://www.rodrigoaguas.com/blog/as-melhores-extensoes-do-firefox-para-desenvolvedores-web/</link>
		<comments>http://www.rodrigoaguas.com/blog/as-melhores-extensoes-do-firefox-para-desenvolvedores-web/#comments</comments>
		<pubDate>Sat, 01 Dec 2007 21:30:21 +0000</pubDate>
		<dc:creator>Rodrigo Aguas</dc:creator>
				<category><![CDATA[Geral]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://www.rodrigoaguas.com/blog/as-melhores-extensoes-do-firefox-para-desenvolvedores-web/</guid>
		<description><![CDATA[Nesse artigo indicarei as melhores extensões (ao meu ver) do Firefox para ajudar o trabalho dos desenvolvedores de sites.
Acho muito boa essa abertura que a Mozilla dá aos usuários para desenvolverem novas funcionalidades para o Firefox. O navegador sai ganhando com a conquista de mais usuários e a fidelização dos usuários de certos nichos que [...]]]></description>
			<content:encoded><![CDATA[<p>Nesse artigo indicarei as melhores <a href="https://addons.mozilla.org/en-US/firefox/">extensões</a> (ao meu ver) do <a href="http://www.mozilla.com/en-US/">Firefox</a> para ajudar o trabalho dos desenvolvedores de sites.</p>
<p>Acho muito boa essa abertura que a Mozilla dá aos usuários para desenvolverem novas funcionalidades para o Firefox. O navegador sai ganhando com a conquista de mais usuários e a fidelização dos usuários de certos nichos que as extensões propiciam funcionalidades não aplicáveis a um browser feito para atender o grande público.</p>
<p>Na página de extensões da Mozilla existe uma quantidade enorme de extensões e exatamente por isso resolvi fazer essa seleção das melhores. Então, vamos lá&#8230;</p>
<p>A lista abaixo está em ordem alfabética, não há relação alguma com minhas preferências.</p>
<p><a href="https://addons.mozilla.org/en-US/firefox/addon/271">ColorZilla</a></p>
<p>Adiciona uma ferramenta &#8220;conta-gotas&#8221; na barra de status do Firefox, com ela você descobre o código da cor no ponto em que você apontar o mouse no site.</p>
<p><a href="https://addons.mozilla.org/en-US/firefox/addon/2104">CSSViewer</a></p>
<p>Mostra as regras de CSS aplicadas a um determinado elemento que você aponte com o mouse. Muito útil quando você identifica um comportamento estranho e precisa descobrir o que está ocasionando-o ou por questões de aprendizado para entender como foi feito um certo efeito.</p>
<p><a href="https://addons.mozilla.org/en-US/firefox/addon/1843">Firebug</a></p>
<p>Essa é uma extensão com funcionalidades que eu não consigo entender muito bem, mas uma única que eu entendo me é extremamente útil, o debugger de Javascript. Um ícone na barra de status do Firefox lhe mostra se ocorreu algum erro no Javascript e lhe mostra onde, lhe permitindo ir direto ao erro.</p>
<p><a href="https://addons.mozilla.org/en-US/firefox/addon/684">Fireftp</a></p>
<p>Tem algo mais necessário do que um cliente ftp para quem trabalho com web? Acho que só conhecimento mesmo (filosofei ahuhuahua). Então, adiciona um cliente ftp ao seu Firefox com controle de contas e tudo mais que nós precisamos. Tah bom&#8230; eu prefiro o Filezilla que está sempre no meu pendrive, mas muita gente não troca o Fireftp por nada, então seria injusto não citá-lo.</p>
<p><a href="https://addons.mozilla.org/en-US/firefox/addon/249">HTML Validator</a></p>
<p>Faz a validação do HTML dos sites que são acessados, mostrando warnings e erros, se existirem, acompanhados de explicação e sugestões de como solucionar o problema. Existem nele 3 métodos de validação, o mais rigido é o &#8220;Serial&#8221; e aos que forem mais flexíveis aconselho o &#8220;Tidy&#8221;.</p>
<p><a href="https://addons.mozilla.org/en-US/firefox/addon/1419">IE Tab</a></p>
<p>Permite que o Firefox exiba sites utilizando a engine de renderização do Internet Explorer, servindo para testar a renderização de CSS no IE sem sair do Firefox. Não funciona no linux, já que não pode haver um Internet Explorer instalado.</p>
<p><a href="https://addons.mozilla.org/en-US/firefox/addon/2076">JSView</a></p>
<p>Acrescenta ao menu e à barra de status opções para visualização dos arquivos Javascript e CSS externos, abrindo-os no visualizador de código-fonte do firefox.</p>
<p><a href="https://addons.mozilla.org/en-US/firefox/addon/532">LinkChecker</a></p>
<p>Sendo sincero, nunca utilizei, mas acho a idéia interessante e bastante útil, principalmente naqueles momentos em que você desenvolve algumas páginas correndo e quer ter certeza que não esqueceu de nenhuma. Ah.. a proposta da extensão é verificar os links de uma página atrás de possíveis links quebrados.</p>
<p><a href="https://addons.mozilla.org/en-US/firefox/addon/539">MeasureIt</a></p>
<p>Clicando no ícone que ele acrescenta na barra de status do seu firefox, esta extensão lhe permite medir (em pixels) uma área retangular do site selecionada pelo mouse, lhe informando a largura e a altura separadamente.</p>
<p><a href="https://addons.mozilla.org/en-US/firefox/addon/2250">Page Validator</a></p>
<p>Aos que pensaram que estou colocando duas extensões com o mesmo fim, não, isso vai acontecer logo abaixo, mas nesse caso a HTML Validator não funciona exatamente igual a essa. A primeira faz a validação no seu próprio computador, enquanto esta encaminha uma requisição ao validador da W3C, que pode acusar alguns erros antes não acusados.</p>
<p><a href="https://addons.mozilla.org/en-US/firefox/addon/3408">Save as Image</a> ou o <a href="https://addons.mozilla.org/en-US/firefox/addon/1146">ScreenGrab!</a></p>
<p><a href="https://addons.mozilla.org/en-US/firefox/addon/1146"></a>Basicamente servem para gerar arquivos com a screenshot do site que você estiver acessando. Utilizo para guardar layouts que eu ache interessantes em minha galeria. Infelizmente, eles não se dão muito bem com Flash. Eu não gosto de Flash mesmo. =)</p>
<p><a href="https://addons.mozilla.org/en-US/firefox/addon/60">Web Developer</a></p>
<p>Por irônia do destino, esta extensão está em último, mas como dizem que quem ri por último, ri melhor&#8230; poisé. Minha vida não seria a mesma sem essa extensão. hahuhuhuhua. Ela adiciona uma barra de ferramentas ao Firefox com diversas funcionalidades (muitas mesmo). Então, só vou listar algumas: desabilitar java, javascript, bloqueador de pop-ups, cache, redirecionamentos, CSS e imagens,  limpar cookies e visualizá-los, escolher Media Type do CSS que será carregado, exibir borda, IDs e diversas outras informações nos elementos da página e redimensionar a janela do Firefox para certas resoluções.</p>
<p>É isso pessoal, espero que esse artigo lhes seja útil e quem tiver outras sugestões é só comentar. Agora com as férias (nem tão férias assim) chegando, acho que terei mais tempo de escrever. Abraços!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rodrigoaguas.com/blog/as-melhores-extensoes-do-firefox-para-desenvolvedores-web/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
