<?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, 31 Jan 2012 19:28:18 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Deploy de aplicação Ruby on Rails no Heroku</title>
		<link>http://www.rodrigoaguas.com/blog/deploy-de-aplicacao-ruby-on-rails-no-heroku/</link>
		<comments>http://www.rodrigoaguas.com/blog/deploy-de-aplicacao-ruby-on-rails-no-heroku/#comments</comments>
		<pubDate>Tue, 31 Jan 2012 18:22:56 +0000</pubDate>
		<dc:creator>Rodrigo Aguas</dc:creator>
				<category><![CDATA[Git]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://www.rodrigoaguas.com/blog/?p=291</guid>
		<description><![CDATA[O Heroku é um serviço de hospedagem na nuvem muito interessante pela facilidade de escalar a sua aplicação tanto em termos de processamento quanto de banco de dados. Como a configuração mais simples de aplicação no Heroku é gratuita, ele se torna mais interessante ainda, por permitir que projetos sejam colocados no ar inicialmente sem [...]]]></description>
			<content:encoded><![CDATA[<p>O <a href="http://www.heroku.com/" title="Heroku" target="_blank">Heroku</a> é um serviço de hospedagem na nuvem muito interessante pela facilidade de escalar a sua aplicação tanto em termos de processamento quanto de banco de dados. Como a configuração mais simples de aplicação no Heroku é gratuita, ele se torna mais interessante ainda, por permitir que projetos sejam colocados no ar inicialmente sem custo algum e à medida que crescerem passam a pagar por mais recursos do servidor.</p>
<p>O objetivo desse tutorial é indicar passo-a-passo como dar deploy de uma aplicação Ruby on Rails no Heroku utilizando o mecanismo de repositório remoto do Git. Antes de iniciarmos, você precisa fazer um <a href="https://api.heroku.com/signup" title="Cadastro no Heroku" target="_blank">cadastro</a> no Heroku.</p>
<p>Considerarei que você tem seu <a href="http://www.rodrigoaguas.com/blog/instalando-rvm-ruby-e-rails-no-ubuntu/" title="Instalando RVM, Ruby e Rails no Ubuntu">ambiente Ruby on Rails configurado</a> e, dessa forma, você só precisa instalar a gem do Heroku.</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">gem install heroku</div></div>
<p>Depois disso, vá para a pasta do seu projeto existente ou crie um novo projeto.</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">rails new [nome do projeto]<br />
cd [nome do projeto]</div></div>
<p>O deploy para o heroku é feito dando push para um repositório remoto do Git, então precisamos antes criar um repositório local do Git para o projeto. Estando na pasta do projeto, execute:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">git init</div></div>
<p>Para adicionar os arquivos do projeto ao controle de versão:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">git add .</div></div>
<p>E depois dar commit:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">git commit -a -m &quot;Meu commit&quot;</div></div>
<p>Antes de começarmos a interagir com o Heroku, precisamos criar uma chave SSH, executando o seguinte comando:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">ssh-keygen -t rsa -C &quot;[seu email]&quot;</div></div>
<p>Agora, vamos criar uma aplicação no Heroku. Após executar o comando abaixo, serão solicitados o seu email e a senha utilizados no cadastro do Heroku.</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">heroku create --stack cedar</div></div>
<p>A aplicação é criada com um nome aleatório, então provavelmente você gostará de renomear a aplicação usando:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">heroku rename newname</div></div>
<p>Antes de darmos deploy da aplicação, precisamos adicionar nossa chave SSH no Heroku com o seguinte comando:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">heroku keys:add</div></div>
<p>Feito isso, enfim podemos dar deploy de nossa aplicação:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">git push heroku master</div></div>
<p>Caso o comando acima dê o erro &#8220;Agent admitted failure to sign using the key. Permission denied (publickey). fatal: The remote end hung up unexpectedly&#8221;, execute o seguinte comando e tente o anterior novamente:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">ssh-add ~/.ssh/id_rsa</div></div>
<p>Nesse momento, basta acessar o endereço http://[nome da sua aplicação].heroku.com/ para visitá-la. Infelizmente, ainda precisamos fazer algumas configurações relativas à banco de dados para seguir desenvolvendo nossas aplicações. O Heroku disponibiliza automaticamente um banco de dados PostgreSQL para cada aplicação, então precisamos acrescentar ao nosso arquivo Gemfile a dependência da gem &#8216;pg&#8217; para conexão com esse banco de dados. Então, se for utilizar o PostgreSQL em todos os ambientes do seu projeto, altere a linha abaixo pela seguinte.</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">gem 'sqlite3'</div></div>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">gem 'pg'</div></div>
<p>Instale o banco PostgreSQL na máquina local:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">sudo apt-get install postgresql</div></div>
<p>Depois instale a gem do PostgreSQL:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">gem install pg</div></div>
<p>Caso receba o erro &#8220;ERROR: Error installing pg: ERROR: Failed to build gem native extension.&#8221; ao executar o comando acima, tente instalar os seguintes pacotes e volte a rodar o comando anterior:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">sudo apt-get install libpq5 libpq-dev</div></div>
<p>E por último atualize o seu projeto:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">bundle install</div></div>
<p>Mas se preferir utilizar outro banco localmente, você precisará configurar diferentes gems para cada ambiente da seguinte forma:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">group :development, :test do<br />
&nbsp; gem 'sqlite3'<br />
end<br />
group :production do<br />
&nbsp; gem 'pg'<br />
end</div></div>
<p>E quando for atualizar seu projeto deverá utilizar o seguinte comando:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">bundle install --without production</div></div>
<p>Pronto! Agora sua aplicação está pronta para ser executada no Heroku. A cada deploy novo que for dar é necessário executar o comando git push anteriormente utilizado e depois para executar as migrates no banco do Heroku é só usar:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">heroku run rake db:migrate</div></div>
<p>Se tiver algum problema na aplicação, basta executar o comando abaixo para acessar os logs do servidor:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">heroku logs</div></div>
<p>Para verificar o estado dos processos no servidor, use:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">heroku ps</div></div>
<p>E caso precise executar algum código no ambiente Rails do servidor, executa um terminal remoto do Rails da seguinte forma:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">heroku run console</div></div>
]]></content:encoded>
			<wfw:commentRss>http://www.rodrigoaguas.com/blog/deploy-de-aplicacao-ruby-on-rails-no-heroku/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Instalando RVM, Ruby e Rails no Ubuntu</title>
		<link>http://www.rodrigoaguas.com/blog/instalando-rvm-ruby-e-rails-no-ubuntu/</link>
		<comments>http://www.rodrigoaguas.com/blog/instalando-rvm-ruby-e-rails-no-ubuntu/#comments</comments>
		<pubDate>Tue, 31 Jan 2012 03:59:15 +0000</pubDate>
		<dc:creator>Rodrigo Aguas</dc:creator>
				<category><![CDATA[Rails]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://www.rodrigoaguas.com/blog/?p=256</guid>
		<description><![CDATA[Nesse tutorial vamos preparar um ambiente de desenvolvimento Ruby on Rails numa máquina Ubuntu. Partiremos de uma instalação padrão do Ubuntu 11.10, sem nenhum pacote extra instalado, e seguiremos o passo-a-passo de como instalar o Ruby enVironment (Version) Manager (RVM), Ruby e Rails. No momento em que escrevo esse tutorial, as versões atuais deles são [...]]]></description>
			<content:encoded><![CDATA[<p>Nesse tutorial vamos preparar um ambiente de desenvolvimento <a title="Ruby on Rails" href="http://rubyonrails.org/" target="_blank">Ruby on Rails</a> numa máquina <a title="Ubuntu Linux" href="http://www.ubuntu-br.org/" target="_blank">Ubuntu</a>. Partiremos de uma instalação padrão do Ubuntu 11.10, sem nenhum pacote extra instalado, e seguiremos o passo-a-passo de como instalar o Ruby enVironment (Version) Manager (RVM), Ruby e Rails. No momento em que escrevo esse tutorial, as versões atuais deles são RVM 1.10.2, Ruby 1.9.3 e Rails 3.2.1, mas o passo-a-passo deve funcionar com outras versões próximas.</p>
<blockquote><p>&#8220;<a title="Ruby enVironment (Version) Manager" href="http://beginrescueend.com/" target="_blank">RVM</a> é uma ferramenta de linha de comando que permite a você facilmente instalar, gerenciar e trabalhar com múltiplos ambientes de interpretadores Ruby e conjuntos de gems.&#8221;</p></blockquote>
<p>Para a instalação do RVM, precisaremos da ferramenta <a title="curl" href="http://curl.haxx.se/" target="_blank">curl</a>. Como essa não vem instalada, instalaremos executando o seguinte comando em um Terminal:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">sudo apt-get install curl</div></div>
<p>Agora podemos instalar o RVM executando:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">bash -s stable &lt; &lt;(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer)</div></div>
<p>Terminada a instalação, usaremos o comando abaixo para acrescentar ao nosso arquivo .bashrc a carga do RVM:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">echo '[[ -s &quot;$HOME/.rvm/scripts/rvm&quot; ]] &amp;&amp; source &quot;$HOME/.rvm/scripts/rvm&quot;' &gt;&gt; ~/.bashrc</div></div>
<p>Feito isso, feche o terminal atual e abra um novo para verificarmos se a instalação foi feita corretamente. Execute o seguinte comando:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">rvm -v</div></div>
<p>Deverá aparecer uma mensagem parecida com a abaixo para confirmar o sucesso da instalação. Caso contrário, algo não deu certo na instalação do RVM.<br />
<img src="http://www.rodrigoaguas.com/blog/wp-content/uploads/2012/01/rvm-version.png" alt="rvm -v" title="rvm -v" width="461" height="76" class="aligncenter size-full wp-image-271" /></p>
<p>Antes de seguir para a instalação do Ruby 1.9.3, devemos instalar alguns pré-requisitos informados pelo seguinte comando:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">rvm requirements</div></div>
<p>Ou seja, devemos executar a seguinte instalação de pacotes:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">sudo apt-get install build-essential openssl libreadline6 libreadline6-dev curl git-core zlib1g zlib1g-dev libssl-dev libyaml-dev libsqlite3-0 libsqlite3-dev sqlite3 libxml2-dev libxslt-dev autoconf libc6-dev ncurses-dev automake libtool bison subversion</div></div>
<p>Agora chegou o momento de instalarmos o Ruby 1.9.3,  execute o comando abaixo e aguarde os downloads e o fim da instalação, que pode demorar um pouco.</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">rvm install 1.9.3</div></div>
<p>Depois da instalação, devemos informar ao RVM que essa será a versão do Ruby a ser utilizada por padrão.</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">rvm --default use 1.9.3</div></div>
<p>Podemos verificar a eficácia do comando anterior analisando a saída do seguinte comando:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">ruby -v</div></div>
<p>A última instalação que precisamos é  da própria gem do Rails:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">gem install rails</div></div>
<p>Para finalizar, criaremos um projeto utilizando o banco de dados sqlite3 (que é o padrão do Rails). Abra um console e vá até a pasta onde deseja criar o projeto, executando o comando abaixo será criada uma pasta com o nome do projeto e toda a estrutura de um projeto Rails dentro.</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">rails new [nome do projeto]</div></div>
<p>Caso queira utilizar bancos de dados MySQL em seu projeto, execute os comandos abaixo para instalar o servidor, o cliente e a gem MySQL. Será solicitada uma senha de acesso para o usuário root do banco.</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">sudo apt-get install mysql-server mysql-client<br />
gem install mysql2</div></div>
<p>A criação do projeto utilizando MySQL deverá ser feita com o seguinte comando:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">rails new [nome do projeto] -d mysql</div></div>
]]></content:encoded>
			<wfw:commentRss>http://www.rodrigoaguas.com/blog/instalando-rvm-ruby-e-rails-no-ubuntu/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Métricas para Campanhas de Marketing Online com Google Analytics</title>
		<link>http://www.rodrigoaguas.com/blog/metricas-para-campanhas-de-marketing-online-com-google-analytics/</link>
		<comments>http://www.rodrigoaguas.com/blog/metricas-para-campanhas-de-marketing-online-com-google-analytics/#comments</comments>
		<pubDate>Wed, 07 Dec 2011 23:04:39 +0000</pubDate>
		<dc:creator>Rodrigo Aguas</dc:creator>
				<category><![CDATA[SEO]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://www.rodrigoaguas.com/blog/?p=224</guid>
		<description><![CDATA[Muito se escuta sobre a importância da divulgação em redes sociais, como Facebook e Twitter, mas poucos sabem como mensurar o retorno desse marketing. A popularização do Google Analytics já foi uma enorme evolução sobre aqueles contadores ridículos e pré-históricos de acesso no estilo &#8220;Você é o 4362º visitante desse site&#8221;. Graças ao Google! Entretanto, [...]]]></description>
			<content:encoded><![CDATA[<p>Muito se escuta sobre a importância da divulgação em redes sociais, como Facebook e Twitter, mas poucos sabem como mensurar o retorno desse marketing. A popularização do <a href="http://www.google.com/analytics/" target="_blank">Google Analytics</a> já foi uma enorme evolução sobre aqueles contadores ridículos e pré-históricos de acesso no estilo &#8220;Você é o 4362º visitante desse site&#8221;. Graças ao Google!</p>
<p>Entretanto, as pessoas utilizam o Google Analytics quase como se fosse apenas um contador de acesso um pouco mais avançado, onde você pode selecionar um intervalo de tempo e ver os acessos nele ou saber algumas informações a mais dos usuários, como navegador de internet, resolução de tela e etc.</p>
<p>Vou explicar nesse artigo como utilizar o Google Analytics para mensurar o retorno das suas campanhas de marketing online, ou seja, ter métricas eficazes sobre os acessos gerados por cada esforço de marketing. Além disso, possibilitar a comparação entre diferentes abordagens, chamado de teste A/B, e tomar decisões de marketing de forma a ter o melhor retorno de visitantes nas campanhas online baseando-se em números e não na intuição.</p>
<p>Tudo que veremos nesse artigo será relacionado à tela de Campanhas do Google Analytics, que fica dentro do item Origens em Fontes de Tráfego no menu lateral. Por enquanto essa tela estará vazia se você nunca utilizou campanhas, como a que segue abaixo. Mas ao fim já teremos dados de uma divulgação no Twitter e Facebook. Então vamos lá!</p>
<p><a href="http://www.rodrigoaguas.com/blog/wp-content/uploads/2011/12/Campanhas.jpg"><img class="size-thumbnail wp-image-225 aligncenter" title="Campanhas de Marketing Online" src="http://www.rodrigoaguas.com/blog/wp-content/uploads/2011/12/Campanhas-150x150.jpg" alt="Campanhas de Marketing Online" width="150" height="150" /></a></p>
<p>A estratégia utilizada para esse tipo de acompanhamento é introduzir em todos os links das campanhas de marketing online parâmetros com informações extras que serão utilizadas pelo Google Analytics para coletar e monitorar as estatísticas desejadas por nós. Esses parâmetros são: utm_medium, utm_source, utm_campaign e utm_content.</p>
<p>O <b>utm_campaign</b> define a qual campanha de marketing o link que estamos criando se refere. Uma campanha pode envolver diversas mídias e fontes de tráfego, como uma conjunto de propagandas em alguns sites, promoções em redes sociais e envío de newsletters, tudo fazendo parte de um único esforço de marketing. Os valores para utm_campaign são definidos por nós, mas aconselha-se a inclusão de algum formato de data para facilitar na análise dos relatórios. Podemos citar como exemplo: divulgacao-artigo-2011-11-20, newsletter-2011-12-07, twittada-2011-10-21, blog-rodrigoaguas e promocao-natal-2011.</p>
<p>O <b>utm_medium</b> é utilizado para definir a mídia utilizada. Ou seja, qual é o meio de comunicação ou mecanismo que estamos utilizando para atingir o nosso público e que conterá aquele link que estamos produzindo. Os valores podem ser definidos por nós mesmos, lembrando que eles serão exibidos nos relatórios. Alguns exemplos de utm_medium podem ser: email, banner, cpc (pay per click) e socialnetwork (compartilhamento em redes sociais).</p>
<p>O <b>utm_source</b> serve para definirmos exatamente de qual fonte pertence aquele tráfego, ou seja, considerando uma campanha online, em qual domínio aquele link foi publicado. Também podemos interpretar o utm_source como &#8220;quem&#8221; gerou aquele tráfego. Os valores também são definidos por nós mesmos. Exemplos de valores de utm_source podem ser: newsletter, twitter, facebook e rodrigoaguas.com.</p>
<p>O <b>utm_content</b> é um parâmetro opcional, mas muito interessante para experimentarmos estratégias ou abordagens distintas para uma mesma propaganda. Por exemplo, pequenas diferenças no texto enviado ou tamanho e posicionamento do banner. Essa técnica é chamada de teste A/B e tem como objetivo definir qual abordagem de propaganda dá melhor retorno. Seguem alguns exemplos: img-vertical-direita, banner-600&#215;200, pergunta-retorica, afirmacao-positivista, texto-colorido e link-rodape.</p>
<p>Vamos então ao exemplo prático! Criarei uma campanha de divulgação no Twitter e no Facebook do último artigo desse blog, sobre virtualização de máquinas Ubuntu. O link original do artigo é <a href="http://www.rodrigoaguas.com/blog/virtualizacao-na-pratica-com-vmware-e-ubuntu/" target="_blank">http://www.rodrigoaguas.com/blog/virtualizacao-na-pratica-com-vmware-e-ubuntu/</a>, mas tenho que acrescentar os parâmetros explicados acima para que o Google Analytics receba as informações sobre essa campanha de marketing. Utilizarei para divulgação no Twitter os seguintes valores:<br />
Origem da campanha (utm_source): twitter<br />
Mídia da campanha (utm_medium): social<br />
Nome da campanha (utm_campaign): post-virtualizacao-ubuntu-2011-10-11</p>
<p>Então, o link a ser divulgado no Twitter fica:<br />
<a href="http://www.rodrigoaguas.com/blog/virtualizacao-na-pratica-com-vmware-e-ubuntu/?utm_source=twitter&amp;utm_medium=social&amp;utm_campaign=post-virtualizacao-ubuntu-2011-10-11" target="_blank">http://www.rodrigoaguas.com/blog/virtualizacao-na-pratica-com-vmware-e-ubuntu/?utm_source=twitter&amp;utm_medium=social&amp;utm_campaign=post-virtualizacao-ubuntu-2011-10-11</a></p>
<p>Para o Facebook, basta trocarmos o valor do utm_source para facebook e temos o link a ser divulgado no Facebook:<br />
<a href="http://www.rodrigoaguas.com/blog/virtualizacao-na-pratica-com-vmware-e-ubuntu/?utm_source=facebook&amp;utm_medium=social&amp;utm_campaign=post-virtualizacao-ubuntu-2011-10-11" target="_blank">http://www.rodrigoaguas.com/blog/virtualizacao-na-pratica-com-vmware-e-ubuntu/?utm_source=facebook&amp;utm_medium=social&amp;utm_campaign=post-virtualizacao-ubuntu-2011-10-11</a></p>
<p>Agora, podemos divulgá-los nas respectivas redes sociais:<a href="http://www.rodrigoaguas.com/blog/wp-content/uploads/2011/12/postando-campanha-twitter.jpg"><img class="aligncenter size-thumbnail wp-image-228" title="Divulgando campanha no Twitter" src="http://www.rodrigoaguas.com/blog/wp-content/uploads/2011/12/postando-campanha-twitter-150x150.jpg" alt="Divulgando campanha no Twitter" width="150" height="150" /></a><a href="http://www.rodrigoaguas.com/blog/wp-content/uploads/2011/12/campanha-twitter.jpg"><img class="aligncenter size-thumbnail wp-image-229" title="Campanha de marketing no Twitter" src="http://www.rodrigoaguas.com/blog/wp-content/uploads/2011/12/campanha-twitter-150x150.jpg" alt="Campanha de marketing no Twitter" width="150" height="150" /></a><a href="http://www.rodrigoaguas.com/blog/wp-content/uploads/2011/12/campanha-facebook.jpg"><img class="aligncenter size-thumbnail wp-image-231" title="Campanha de marketing no Facebook" src="http://www.rodrigoaguas.com/blog/wp-content/uploads/2011/12/campanha-facebook-150x150.jpg" alt="Campanha de marketing no Facebook" width="150" height="150" /></a></p>
<p>Feito isso, basta aguardar os acessos e acessar o Google Analytics para saber o retorno da sua campanha. Caso queira testar imediatamente o funcionamento dos links, você precisa selecionar um  intervalo de datas no Google Analytics que contenha o dia atual ou utilizar a nova funcionalidade de tempo real. Abaixo, seguem as telas do Google Analytics com os relatórios desse exemplo prático. Na primeira temos listado as campanhas dessa conta, nesse caso, apenas a campanha de divulgação do post de virtualização utilizado no exemplo. Na segunda vemos mais detalhes da campanha, como o número de acessos por origem. Por último, temos uma tela do relatório de visitas em tempo real.<br />
<a href="http://www.rodrigoaguas.com/blog/wp-content/uploads/2011/12/campanha-google-analytics-1.jpg"><img class="aligncenter size-thumbnail wp-image-239" title="Campanhas do Google Analytics" src="http://www.rodrigoaguas.com/blog/wp-content/uploads/2011/12/campanha-google-analytics-1-150x150.jpg" alt="Campanhas do Google Analytics" width="150" height="150" /></a><a href="http://www.rodrigoaguas.com/blog/wp-content/uploads/2011/12/campanha-google-analytics-2.jpg"><img class="aligncenter size-thumbnail wp-image-240" title="Detalhes da Campanha no Google Analytics" src="http://www.rodrigoaguas.com/blog/wp-content/uploads/2011/12/campanha-google-analytics-2-150x150.jpg" alt="Detalhes da Campanha no Google Analytics" width="150" height="150" /></a><a href="http://www.rodrigoaguas.com/blog/wp-content/uploads/2011/12/google-analytics-real-time.jpg"><img class="aligncenter size-thumbnail wp-image-234" title="Relatório das Campanhas no Google Analytics em Tempo Real" src="http://www.rodrigoaguas.com/blog/wp-content/uploads/2011/12/google-analytics-real-time-150x150.jpg" alt="Relatório das Campanhas no Google Analytics em Tempo Real" width="150" height="150" /></a></p>
<p>Para facilitar essa tarefa de criação de links, o Google disponibilizou uma <a href="http://support.google.com/googleanalytics/bin/answer.py?hl=pt-BR&amp;answer=55578" target="_blank">ferramenta</a> bem simples para criação desses links. Espero que tenham gostado e façam bom uso! Abraços.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rodrigoaguas.com/blog/metricas-para-campanhas-de-marketing-online-com-google-analytics/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Virtualização na prática com VMWare e Ubuntu</title>
		<link>http://www.rodrigoaguas.com/blog/virtualizacao-na-pratica-com-vmware-e-ubuntu/</link>
		<comments>http://www.rodrigoaguas.com/blog/virtualizacao-na-pratica-com-vmware-e-ubuntu/#comments</comments>
		<pubDate>Wed, 12 Oct 2011 02:26:19 +0000</pubDate>
		<dc:creator>Rodrigo Aguas</dc:creator>
				<category><![CDATA[Virtualização]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[virtualização]]></category>
		<category><![CDATA[vmware]]></category>

		<guid isPermaLink="false">http://www.rodrigoaguas.com/blog/?p=170</guid>
		<description><![CDATA[Virtualização é a técnica de simular um ambiente real virtualmente. Essa técnica tem sido cada vez mais utilizada como solução para diversas situações e traz diversos benefícios, como flexibilidade e melhor aproveitamento de recursos. Uma aplicação rotineira de virtualização é a criação de máquinas virtuais em um único computador real (máquina hospedeira) simulando a existência [...]]]></description>
			<content:encoded><![CDATA[<p>Virtualização é a técnica de simular um ambiente real virtualmente. Essa técnica tem sido cada vez mais utilizada como solução para diversas situações e traz diversos benefícios, como flexibilidade e melhor aproveitamento de recursos. Uma aplicação rotineira de virtualização é a criação de máquinas virtuais em um único computador real (máquina hospedeira) simulando a existência de máquinas com características distintas. Por exemplo, quando precisamos utilizar um sistema operacional diferente do habitual, mas a solução utilizando <a href="http://pt.wikipedia.org/wiki/Multi_boot" target="_blank">dual boot</a> não agrada por ser muito pouco flexível.</p>
<p>Mostrarei nesse artigo como virtualizar uma máquina com o sistema operacional <a href="http://www.ubuntu.com/">Ubuntu</a> utilizando o software de virtualização <a href="http://www.vmware.com/products/player/" target="_blank">VMWare</a>. Basearei esse tutorial na versão 4 do VMWare Player, para baixá-lo gratuitamente é necessário fazer o <a href="https://www.vmware.com/tryvmware/" target="_blank">cadastro no site</a>. Além dele, você deve <a href="http://www.ubuntu.com/download/ubuntu/download" target="_blank">baixar</a> a imagem do disco de instalação do Ubuntu ou ter um em mãos.</p>
<p>Concluídos os downloads, o passo seguinte é instalar o VMWare. Não entrarei em detalhes dos passos para a instalação por depender do ambiente utilizado, mas no windows ela é no formato de wizard, ou seja, basicamente basta clicar em next, next, next&#8230;</p>
<p>Instalado o VMWare, execute-o e clique em &#8220;Create a New Virtual Machine&#8221; na tela inicial. Nela você deve escolher a origem dos arquivos de instalação do Ubuntu. Se você tem o disco de instalação, coloque ele na unidade de cd, escolha a primeira opção e selecione a unidade correta. Caso tenha baixado a imagem do disco, marque a segunda opção e selecione o arquivo. Clique no botão &#8220;Next&#8221;.</p>
<p><a href="http://www.rodrigoaguas.com/blog/wp-content/uploads/2011/10/VMware-01-tela_inicial.jpg"><img class="size-thumbnail wp-image-182 aligncenter" title="Tela inicial do VMWare" src="http://www.rodrigoaguas.com/blog/wp-content/uploads/2011/10/VMware-01-tela_inicial-150x150.jpg" alt="Tela inicial do VMWare" width="150" height="150" /></a> <a href="http://www.rodrigoaguas.com/blog/wp-content/uploads/2011/10/VMware-02-source.jpg"><img src="http://www.rodrigoaguas.com/blog/wp-content/uploads/2011/10/VMware-02-source-150x150.jpg" alt="Origem dos arquivos de instalação para o VMware" title="Origem dos arquivos de instalação para o VMware" width="150" height="150" class="aligncenter size-thumbnail wp-image-185" /></a></p>
<p>O VMWare identificará que você está instalando o Ubuntu e utilizará um modo automático de instalação para facilitar e agilizar a instalação. Na tela exibida, você deve informar seu nome completo e definir um nome de usuário e senha a serem utilizados no Ubuntu. Clique em &#8220;Next&#8221;.</p>
<p><a href="http://www.rodrigoaguas.com/blog/wp-content/uploads/2011/10/VMware-03-easy_install.jpg"><img src="http://www.rodrigoaguas.com/blog/wp-content/uploads/2011/10/VMware-03-easy_install-150x150.jpg" alt="Instalação fácil para linux" title="Instalação fácil para linux" width="150" height="150" class="aligncenter size-thumbnail wp-image-188" /></a></p>
<p>Na próxima tela você deve escolher um nome para a máquina virtual que está criando e o local onde ela será armazenada no seu computador. Esse nome será utilizando pelo VMWare para se referir à máquina virtual. Clique em &#8220;Next&#8221;.</p>
<p><a href="http://www.rodrigoaguas.com/blog/wp-content/uploads/2011/10/VMware-04-virtual_machine.jpg"><img src="http://www.rodrigoaguas.com/blog/wp-content/uploads/2011/10/VMware-04-virtual_machine-150x150.jpg" alt="Dados da máquina virtual" title="Dados da máquina virtual" width="150" height="150" class="aligncenter size-thumbnail wp-image-189" /></a></p>
<p>Agora você deve definir o tamanho máximo a ser utilizado do disco rígido, além disso esse espaço será utilizado como tamanho do disco rígido da máquina virtual, mas não será reservado para ela. A outra escolha é se a máquina virtual será armazenada em um único arquivo ou em vários. Sugiro deixar ambos da forma como é sugerido (20Gb para o Ubuntu e dividir o disco virtual em multiplos arquivos). Clique em &#8220;Next&#8221;.</p>
<p><a href="http://www.rodrigoaguas.com/blog/wp-content/uploads/2011/10/VMware-05-disk.jpg"><img src="http://www.rodrigoaguas.com/blog/wp-content/uploads/2011/10/VMware-05-disk-150x150.jpg" alt="Arquivos da máquina virtual" title="Arquivos da máquina virtual" width="150" height="150" class="aligncenter size-thumbnail wp-image-191" /></a></p>
<p>Por fim, os detalhes da máquina virtual a ser criada são exibidos, permitindo personalizar características de hardware dela, como número de processadores e memória RAM utilizada, clicando no botão &#8220;Customize Hardware&#8221;. Clique em &#8220;Finish&#8221; para finalizar o wizard de criação da máquina virtual.</p>
<p><a href="http://www.rodrigoaguas.com/blog/wp-content/uploads/2011/10/VMware-06-details.jpg"><img src="http://www.rodrigoaguas.com/blog/wp-content/uploads/2011/10/VMware-06-details-150x150.jpg" alt="Detalhes da máquina virtual" title="Detalhes da máquina virtual" width="150" height="150" class="aligncenter size-thumbnail wp-image-192" /></a></p>
<p>Após o fim do wizard, o VMWare seguirá com a instalação do Ubuntu de forma automática.</p>
<p><a href="http://www.rodrigoaguas.com/blog/wp-content/uploads/2011/10/VMware-10-install.jpg"><img src="http://www.rodrigoaguas.com/blog/wp-content/uploads/2011/10/VMware-10-install-150x150.jpg" alt="Instalando o Ubuntu" title="Instalando o Ubuntu" width="150" height="150" class="aligncenter size-thumbnail wp-image-194" /></a></p>
<p>Pode ser que a janela abaixo seja apresentada durante a instalação com a opção de instalar o VMWare Tools, que acrescenta funcionalidades de integração entre a máquina virtual e a máquina hospedeira, tais como copy e paste de arquivos entre elas e ajuste automático da resolução. Sugiro a instalação clicando em &#8220;Download and Install&#8221;.</p>
<p><a href="http://www.rodrigoaguas.com/blog/wp-content/uploads/2011/10/VMware-08-vmware_tools.jpg"><img src="http://www.rodrigoaguas.com/blog/wp-content/uploads/2011/10/VMware-08-vmware_tools-150x150.jpg" alt="Instalação do VMWare Tools" title="Instalação do VMWare Tools" width="150" height="150" class="aligncenter size-thumbnail wp-image-200" /></a></p>
<p>Aguarde até o fim da instalação do Ubuntu (isso pode demorar) e pronto! Temos nossa máquina virtual para rodar Ubuntu virtualizado dentro de outro sistema operacional qualquer. Agora basta entrar com a senha definida durante o wizard de instalação.</p>
<p><a href="http://www.rodrigoaguas.com/blog/wp-content/uploads/2011/10/VMware-11-login.jpg"><img src="http://www.rodrigoaguas.com/blog/wp-content/uploads/2011/10/VMware-11-login-150x150.jpg" alt="Tela de login do Ubuntu virtualizado" title="Tela de login do Ubuntu virtualizado" width="150" height="150" class="aligncenter size-thumbnail wp-image-197" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.rodrigoaguas.com/blog/virtualizacao-na-pratica-com-vmware-e-ubuntu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Por que meu site não aparece no Google?</title>
		<link>http://www.rodrigoaguas.com/blog/por-que-meu-site-nao-aparece-no-google/</link>
		<comments>http://www.rodrigoaguas.com/blog/por-que-meu-site-nao-aparece-no-google/#comments</comments>
		<pubDate>Wed, 08 Jun 2011 15:12:13 +0000</pubDate>
		<dc:creator>Rodrigo Aguas</dc:creator>
				<category><![CDATA[SEO]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[robots]]></category>
		<category><![CDATA[seo]]></category>

		<guid isPermaLink="false">http://www.rodrigoaguas.com/blog/?p=155</guid>
		<description><![CDATA[Você publicou um site na internet há vários dias e ele não aparece nos resultados de pesquisa do Google? Não fique desesperado, você não está sozinho. Muitas pessoas já passaram por essa situação sem saber o que fazer para resolvê-la, inclusive eu. Recentemente publiquei o site de um serviço muito interessante de scrapbook fotográfico em [...]]]></description>
			<content:encoded><![CDATA[<p>Você publicou um site na internet há vários dias e ele não aparece nos resultados de pesquisa do Google? Não fique desesperado, você não está sozinho. Muitas pessoas já passaram por essa situação sem saber o que fazer para resolvê-la, inclusive eu. Recentemente publiquei o site de um serviço muito interessante de <a href="http://scrapbook.i9box.com.br/">scrapbook fotográfico</a> em que montam um <a href="http://scrapbook.i9box.com.br/sobre.php">estúdio de fotos na festa</a> para os convidados serem fotografados com mensagens para os noivos e, posteriormente, é feito um álbum com as fotos. Então, como já resolvi o problema com o site, deixo aqui algumas dicas para fazer seu site ser indexado pelo Google e aparecer nos resultados.</p>
<p>A primeira coisa a se fazer é verificar se de fato o site não está no Google, pois dependendo da pesquisa que foi feita ele pode não estar aparecendo nas primeiras páginas, causando a impressão de que não está lá. Pequise no google pelo seu domínio, no meu caso seria da seguinte forma: <a href="http://www.google.com/search?q=site%3Arodrigoaguas.com">site:rodrigoaguas.com</a>. Caso tenha encontrado o seu site, significa que ele está indexado pelo Google, porém não consegue aparecer entre os primeiros resultados para as pesquisas feitas. Nessa situação é necessário otimizar o site para buscadores, um bom livro sobre o assunto é o &#8220;<a href="http://www.amazon.com/Search-Engine-Optimization-SEO-Hour/dp/0470902590/">Search Engine Optimization (SEO): An Hour a Day</a>&#8220;.</p>
<p>No meu caso, o site realmente não estava sendo exibido no Google. Após algumas pesquisas, percebi que o meu site não tinha um arquivo robots.txt na raiz. Esse arquivo indica aos <a href="http://pt.wikipedia.org/wiki/Web_crawler">crawlers</a> dos mecanismos de busca quais páginas do seu site podem ou não podem ser exibidas por eles. Segue um exemplo de arquivo robots.txt:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">User-agent: *<br />
Disallow: /pasta_que_nao_pode_aparecer</div></div>
<p>Colocando esse arquivo na hospedagem, tentei novamente a busca no Google e lá estava o resultado!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rodrigoaguas.com/blog/por-que-meu-site-nao-aparece-no-google/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Instalando JBoss Tools no Eclipse</title>
		<link>http://www.rodrigoaguas.com/blog/instalando-jboss-tools-no-eclipse/</link>
		<comments>http://www.rodrigoaguas.com/blog/instalando-jboss-tools-no-eclipse/#comments</comments>
		<pubDate>Mon, 06 Dec 2010 00:51:17 +0000</pubDate>
		<dc:creator>Rodrigo Aguas</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[jboss tools]]></category>

		<guid isPermaLink="false">http://www.rodrigoaguas.com/blog/?p=140</guid>
		<description><![CDATA[O JBoss Tools é um plugin do Eclipse para utilização de tecnologias ligadas à JBoss, como: JBoss AS, Hibernate, JPA, Drools, jBPM, JavaServer Faces, (X)HTML, JBoss Seam, Smooks, JBoss ESB, JBoss Portal e outros. A versão do JBoss Tools a ser instalada deve ser compatível com a versão do Eclipse utilizado, baseando-se na página de [...]]]></description>
			<content:encoded><![CDATA[<p>O <a href="http://www.jboss.org/tools">JBoss Tools</a> é um plugin do <a href="http://www.eclipse.org/">Eclipse</a> para utilização de tecnologias ligadas à JBoss, como: JBoss AS, Hibernate, JPA, Drools, jBPM, JavaServer Faces, (X)HTML, JBoss Seam, Smooks, JBoss ESB, JBoss Portal e outros.</p>
<p>A versão do JBoss Tools a ser instalada deve ser compatível com a versão do Eclipse utilizado, baseando-se na <a href="http://www.jboss.org/tools/download.html">página de download</a>. Dê preferência pelas &#8220;Stable Releases&#8221;, só escolha uma versão &#8220;Development Milestones&#8221; se houver necessidade. Por exemplo, no momento em que escrevo este post, a última versão do Eclipse lançada é a Helios e não há uma versão estável do JBoss Tools compatível com este, então precisarei utilizar o JBoss Tools 3.6.0 ainda em desenvolvimento.</p>
<p>Então, vamos ao passo-a-passo:</p>
<p>1- Abra o Eclipse</p>
<p>2- Vá ao menu &#8220;Help&#8221; e clique em &#8220;Install New Software&#8221;</p>
<p>3- Clique no botão &#8220;Add&#8221; ao lado do campo &#8220;Work with&#8221;</p>
<p>4- Preencha o campo &#8220;Name&#8221; com &#8220;JBoss Tools 3.6.0&#8243; (sem aspas)</p>
<p>5- Preencha o campo &#8220;Location&#8221; com o endereço encontrado na <a href="http://www.jboss.org/tools/download.html">página de download</a>. No meu caso é  &#8220;http://download.jboss.org/jbosstools/updates/development/&#8221; (novamente, sem aspas)</p>
<p>6- Clique em &#8220;OK&#8221;</p>
<p>7- Marque os componentes desejados (ou todos, se preferir). Por exemplo, alguns bastante utilizados são: Hibernate Tools, JBossAS Tools e JBoss Tools RichFaces.</p>
<p>8- Clique em &#8220;Next&#8221;</p>
<p>9- Clique novamente em &#8220;Next&#8221;</p>
<p>10- Marque a opção &#8220;I accept the terms of the license agreements&#8221;</p>
<p>11- Clique no botão &#8220;Finish&#8221;</p>
<p>12- Aguarde o processo de instalação, aparecerá uma janela com título &#8220;Security Warning&#8221;, clique em &#8220;OK&#8221;</p>
<p>13- Aguarde novamente e clique em &#8220;Restart Now&#8221; na janela que aparecerá</p>
<p>Pronto! Seu Eclipse já está com JBoss Tools instalado.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rodrigoaguas.com/blog/instalando-jboss-tools-no-eclipse/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<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[Java]]></category>
		<category><![CDATA[JSF]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[jsf]]></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, [...]]]></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;"><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></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;"><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></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;"><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></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;"><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></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;"><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></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;"><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></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;"><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></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;"><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></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>2</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>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></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. [...]]]></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;"><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></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;"><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></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;"><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></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;"><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></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;"><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></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;"><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></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;"><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></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;"><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></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;"><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></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;"><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></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;"><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></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;"><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></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;"><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></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>1</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[Java]]></category>
		<category><![CDATA[JSF]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[facelets]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[jsf]]></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;"><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></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;"><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></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>2</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[Java]]></category>
		<category><![CDATA[JSF]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[jboss]]></category>
		<category><![CDATA[jsf]]></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 [...]]]></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>5</slash:comments>
		</item>
	</channel>
</rss>

