<?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>PHPAULO &#187; GWT</title>
	<atom:link href="http://www.phpaulo.com.br/tag/gwt/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.phpaulo.com.br</link>
	<description>Só mais um site WordPress</description>
	<lastBuildDate>Wed, 14 Sep 2011 15:13:53 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Iniciando com o GWT</title>
		<link>http://www.phpaulo.com.br/desenvolvimento/iniciando-com-o-gwt/</link>
		<comments>http://www.phpaulo.com.br/desenvolvimento/iniciando-com-o-gwt/#comments</comments>
		<pubDate>Sat, 15 Aug 2009 02:51:21 +0000</pubDate>
		<dc:creator>phpaulo</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[GWT]]></category>

		<guid isPermaLink="false">http://www.phpaulo.com.br/?p=13</guid>
		<description><![CDATA[Artigo explica as funcionalidades básicas para o trabalho com o Framework GWT <a href="http://www.phpaulo.com.br/desenvolvimento/iniciando-com-o-gwt/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><em>S</em>abemos que deixar uma interface rica e que funcione nos principais navegadores é muito difícil devido à falta de padrões existentes entre os navegadores. O GWT foi criado para facilitar essa tarefa para os desenvolvedores, pois podem passar até 90% do tempo diário para contornar as peculiaridades de cada navegador.</p>
<p>O GWT (Google Web Toolkit) é um framework para desenvolvimento web que tem como objetivo facilitar a vida dos desenvolvedores, pois possui um conjunto de ferramentas, API e componentes visuais que facilitam a criação de modernas, ricas e dinâmicas interfaces.</p>
<p>A criação do código para geração da interface é escrita usando Java e não JavaScript, o que torna o desenvolvimento muito mais fácil, pois graças as IDEs (ferramentas que auxiliam o desenvolvimento, muita delas gratuitas e conhecidas), os erros podem ser descobertos em tempo de compilação, Java é fortemente tipada e é muito mais fácil encontrar desenvolvedores Java no mercado do que JavaScript.</p>
<p>No momento que a classe Java é compilada o GWT faz o papel de compilador JavaScript, fazendo com que o código Java seja convertido em JavaScript. O <strong>Hosted Mode</strong> é utilizado como <strong>debbuger</strong> do código facilitando a identificação dos erros devido ao seu console de administração.</p>
<p>Uma funcionalidade muito interessante é que com o GWT minimizamos ao máximo o tamanho do arquivo JavaScript, ao invés de fazer vários “IFs” no código para saber qual o navegador, qual o idioma, etc., ele gera um arquivo JavaScript para cada tipo de combinação de navegador e se por acaso sua aplicação for internacionalizada, o GWT gerará um arquivo JavaScript para cada tipo de idioma. O responsável por saber qual arquivo será utilizado na hora de exibição para o usuário é o servidor, tudo isso ocorre transparentemente para os usuários.</p>
<p><strong>Começando</strong></p>
<p>Para iniciarmos uma aplicação usando o GWT, precisamos fazer o download de suas bibliotecas que podem ser baixadas nesse link, <a href="http://code.google.com/intl/pt-BR/webtoolkit/" target="_blank">http://code.google.com/intl/pt-BR/webtoolkit/</a>. Além disso, precisaremos de uma IDE, usaremos o Eclipse IDE versão Ganymede que pode ser baixado neste link, <a href="http://www.eclipse.org/downloads/" target="_blank">http://www.eclipse.org/downloads/</a>. Para facilitar ainda mais o desenvolvimento, devemos fazer o download do plugin do GWT para o Eclipse Ganymede, que pode ser encontrado neste link, <a href="http://code.google.com/intl/pt-BR/eclipse/docs/download.html" target="_blank">http://code.google.com/intl/pt-BR/eclipse/docs/download.html</a>.</p>
<p>Neste passo não vamos detalhar o processo de instalação, pois no site Google este passo está muito bem detalhado, veja este link, <a href="http://code.google.com/intl/pt-BR/eclipse/docs/install-eclipse-3.4.html" target="_blank">http://code.google.com/intl/pt-BR/eclipse/docs/install-eclipse-3.4.html</a></p>
<p>Para criar um novo projeto usando o Eclipse e o plugin, devemos clicar em <em>File</em> &gt; <em>New</em> &gt; <em>Web Application Project</em>. Preencha o campo <em>Project name</em> com o nome do projeto, no exemplo usaremos <strong>PucProjeto</strong>, o campo <em>Package</em> pode ser preenchido com o pacote que deseja que fique o raiz do projeto, no exemplo usaremos <strong>br.pucsp.pos.web</strong>. No campo <em>Location</em> definimos o <em>workspace</em> da aplicação, no campo <em>Google SDKs </em>definimos qual <em>GWT</em> devemos usar e qual a <em>Engine</em> devemos usar. Após isso clique em <em>Finish</em>.</p>
<p> </p>
<div class="wp-caption aligncenter" style="width: 518px"><a href="http://www.phpaulo.com.br/artigo/images/artigo-gwt-imagem-1.jpg"><img title="Figura 1" src="http://www.phpaulo.com.br/artigo/images/artigo-gwt-imagem-1.jpg" alt="Imagem 1 Artigo GWT" width="508" height="574" /></a><p class="wp-caption-text">Imagem 1 Artigo GWT</p></div>
<p>Após clicar em <em>Finish</em> uma aplicação de exemplo será criada, para testá-la, clique com o botão do lado direito sobre o projeto e depois <em>Run As </em>&gt; <em>Web Application</em>, um console do Google será aberto e você ver a aplicação de teste em funcionamento.</p>
<p>Todo o código que é renderizado e mostrado para o usuário está na classe <strong>br.pucsp.pos.web.client.PucProjeto</strong>, que usa uma implementação da classe <strong>com.google.gwt.core.client.EntryPoint.</strong> O código que será compilado deve ficar dentro do método <strong>onModuleLoad()</strong>, caso queira editar este projeto que o plugin criou, pode excluir todas as <strong>classes</strong> exceto a <strong>br.pucsp.pos.web.client.PucProjeto</strong>, fazendo isso não teremos nenhum problema, pois somente com ela o GWT consegue compilar.</p>
<p>Na criação do projeto usando o plugin uma pasta chamada <strong>war </strong>foi criada, dentro dessa pasta existem dois arquivos, um com as configurações do CSS (Cascading Style Sheet), que são as folhas de estilo. Podemos criar as nossas classes e nossos IDs e depois usá-los no código Java do GWT citando o id com o seguinte comando:</p>
<blockquote><p>closeButton.getElement().setId(&#8220;closeButton&#8221;);</p></blockquote>
<p> </p>
<p>ou citando a classe com o seguinte comando:</p>
<blockquote><p> closeButton.getElement().setClassName(&#8220;sendButton&#8221;);</p></blockquote>
<p>No outro arquivo encontramos o layout da página HTML, todos os elementos que forem absolutos devem ser inseridos nessa página. Podemos definir áreas nesse código HTML que serão inseridas via a classe Java que estamos criando com o uso do framework GWT. No exemplo criado pelo plugin, o GWT criou uma página com uma tabela com duas colunas e definiu as colunas como áreas, para o nosso exemplo, altere o nome dessas áreas para os seguintes nomes, <em>nameFieldContainer, aboutButtonContainer.</em>            Para que algo seja inserido nessas áreas, devemos criar um tipo de painel, no exemplo usamos o <strong>SimplePanel</strong> e o <strong>DialogBox</strong> que são referenciadas no código Java através da seguinte linha de código:</p>
<blockquote><p>      RootPanel.<em>get</em>(&#8220;nameFieldContainer&#8221;).add(psugBox);</p>
<p>      RootPanel.<em>get</em>(&#8220;aboutButtonContainer&#8221;).add(aboutButton);</p></blockquote>
<p>     </p>
<p>Abaixo está o código completo da classe <strong>br.pucsp.pos.web.client.PucProjeto</strong><strong> </strong></p>
<blockquote><p><strong>package</strong> br.pucsp.pos.web.client;</p>
<p> </p>
<p><strong>import</strong> com.google.gwt.core.client.EntryPoint;</p>
<p><strong>import</strong> com.google.gwt.event.dom.client.ClickEvent;</p>
<p><strong>import</strong> com.google.gwt.event.dom.client.ClickHandler;</p>
<p><strong>import</strong> com.google.gwt.user.client.ui.Button;</p>
<p><strong>import</strong> com.google.gwt.user.client.ui.DialogBox;</p>
<p><strong>import</strong> com.google.gwt.user.client.ui.HTML;</p>
<p><strong>import</strong> com.google.gwt.user.client.ui.Label;</p>
<p><strong>import</strong> com.google.gwt.user.client.ui.MultiWordSuggestOracle;</p>
<p><strong>import</strong> com.google.gwt.user.client.ui.RootPanel;</p>
<p><strong>import</strong> com.google.gwt.user.client.ui.SimplePanel;</p>
<p><strong>import</strong> com.google.gwt.user.client.ui.SuggestBox;</p>
<p><strong>import</strong> com.google.gwt.user.client.ui.VerticalPanel;</p>
<p> </p>
<p><strong>public</strong> <strong>class</strong> PucProjeto <strong>implements</strong> EntryPoint {</p>
<p> </p>
<p>       <strong>public</strong> <strong>void</strong> onModuleLoad() {</p>
<p>             <strong>final</strong> Button aboutButton = <strong>new</strong> Button(&#8220;Sobre&#8221;);</p>
<p>            </p>
<p>             <strong>final</strong> DialogBox about = <strong>new</strong> DialogBox();</p>
<p>             about.setText(&#8220;Sobre o Exemplo&#8221;);</p>
<p>             about.setAnimationEnabled(<strong>true</strong>);</p>
<p>             <strong>final</strong> Button closeButton = <strong>new</strong> Button(&#8220;Fechar&#8221;);</p>
<p>             closeButton.getElement().setId(&#8220;closeButton&#8221;);</p>
<p>             aboutButton.getElement().setClassName(&#8220;sendButton&#8221;);</p>
<p>            </p>
<p>             VerticalPanel dialogVPanel = <strong>new</strong> VerticalPanel();</p>
<p>             dialogVPanel.addStyleName(&#8220;dialogVPanel&#8221;);</p>
<p>             dialogVPanel.add(<strong>new</strong> HTML(&#8220;&lt;b&gt;Projeto Desenvolvido por:&lt;/b&gt;&#8221;));</p>
<p>             dialogVPanel.add(<strong>new</strong> HTML(&#8220;&lt;br&gt;&lt;b&gt;Paulo Fernandes [ paulofernandesjr@gmail.com ]&lt;/b&gt;&#8221;));</p>
<p>             dialogVPanel.setHorizontalAlignment(VerticalPanel.<em>ALIGN_RIGHT</em>);</p>
<p>             dialogVPanel.add(closeButton);</p>
<p>             about.setWidget(dialogVPanel);</p>
<p>            </p>
<p>             /**</p>
<p>              * <span style="text-decoration: underline;">Essa</span> é <span style="text-decoration: underline;">uma</span> <span style="text-decoration: underline;">forma</span> <span style="text-decoration: underline;">de</span> fazer</p>
<p>              */</p>
<p>             <strong>class</strong> MyHandler <strong>implements</strong> ClickHandler {</p>
<p>                    <strong>public</strong> <strong>void</strong> onClick(ClickEvent event) {</p>
<p>                           aboutButton.setEnabled(<strong>false</strong>);</p>
<p>                           about.setText(&#8220;Sobre o Projeto&#8221;);</p>
<p>                           about.center();</p>
<p>                           closeButton.setFocus(<strong>true</strong>);</p>
<p>                    }</p>
<p>             }</p>
<p>             MyHandler handler = <strong>new</strong> MyHandler();</p>
<p>             aboutButton.addClickHandler(handler);</p>
<p> </p>
<p>             /**</p>
<p>              * <span style="text-decoration: underline;">Essa</span> é <span style="text-decoration: underline;">outra</span> <span style="text-decoration: underline;">forma</span> <span style="text-decoration: underline;">de</span> <span style="text-decoration: underline;">fazer</span></p>
<p>              */</p>
<p>             closeButton.addClickHandler(<strong>new</strong> ClickHandler() {</p>
<p>                    <strong>public</strong> <strong>void</strong> onClick(ClickEvent event) {</p>
<p>                           about.hide();</p>
<p>                           aboutButton.setEnabled(<strong>true</strong>);</p>
<p>                           aboutButton.setFocus(<strong>true</strong>);</p>
<p>                    }</p>
<p>             });</p>
<p> </p>
<p>             MultiWordSuggestOracle palavras = <strong>new</strong> MultiWordSuggestOracle();</p>
<p>             palavras.add(&#8220;abacate&#8221;);</p>
<p>             palavras.add(&#8220;abacaxi&#8221;);</p>
<p>             palavras.add(&#8220;acordar&#8221;);</p>
<p>             palavras.add(&#8220;aeromotor&#8221;);</p>
<p>              palavras.add(&#8220;agudo&#8221;);</p>
<p>             palavras.add(&#8220;alcool&#8221;);</p>
<p>             palavras.add(&#8220;algarismo&#8221;);</p>
<p>            </p>
<p>             SuggestBox suggestBox = <strong>new</strong> SuggestBox(palavras);</p>
<p>             suggestBox.setAnimationEnabled(<strong>true</strong>);</p>
<p>             suggestBox.setVisible(<strong>true</strong>);</p>
<p> </p>
<p>             /**</p>
<p>              * <span style="text-decoration: underline;">painel</span> <span style="text-decoration: underline;">para</span> a <span style="text-decoration: underline;">caixa</span> <span style="text-decoration: underline;">de</span> <span style="text-decoration: underline;">sugestoes</span></p>
<p>              */</p>
<p>             VerticalPanel sugBox = <strong>new</strong> VerticalPanel();</p>
<p>             sugBox.setHorizontalAlignment(VerticalPanel.<em>ALIGN_CENTER</em>);</p>
<p>             sugBox.add(<strong>new</strong> Label(&#8220;Digite a letra A&#8221;));</p>
<p>             sugBox.add(suggestBox);</p>
<p>             SimplePanel psugBox = <strong>new</strong> SimplePanel();</p>
<p>             psugBox.setWidget(sugBox);</p>
<p>            </p>
<p>             RootPanel.<em>get</em>(&#8220;nameFieldContainer&#8221;).add(psugBox);</p>
<p>             RootPanel.<em>get</em>(&#8220;aboutButtonContainer&#8221;).add(aboutButton);</p>
<p>                          </p>
<p>       }</p>
<p>}</p></blockquote>
<p><strong> </strong><strong> </strong></p>
<p><strong></p>
<div class="wp-caption aligncenter" style="width: 580px"><a href="http://www.phpaulo.com.br/artigo/images/artigo-gwt-imagem-2.jpg"><img title="Imagem 2 Artigo GWT" src="http://www.phpaulo.com.br/artigo/images/artigo-gwt-imagem-2.jpg" alt="Imagem 2 Artigo GWT" width="570" height="430" /></a><p class="wp-caption-text">Imagem 2 Artigo GWT</p></div>
<p></strong></p>
<p><strong>Concluindo</strong></p>
<p>No seguinte link <a href="http://code.google.com/intl/pt-BR/webtoolkit/doc/1.6/DevGuide.html" target="_blank">http://code.google.com/intl/pt-BR/webtoolkit/doc/1.6/DevGuide.html</a> está o guia para os desenvolvedores que quiserem se aperfeiçoar mais com este excelente framework.  Neste outro link tem uma aplicação de exemplo que o pessoal do Google fez para vermos mais um pouco do poder do GWT <a href="http://gwt.google.com/samples/Mail/Mail.html" target="_blank">http://gwt.google.com/samples/Mail/Mail.html</a>.</p>
<p>Com este artigo descobrimos o quanto podemos melhorar nossas aplicações usando o GWT, para quem já desenvolve para web, sabe que para fazer o que fizemos neste exemplo, daria um trabalho um tanto quanto complexo, imagine só essa aplicação de e-mail que está no link acima.</p>
<p> </p>
<p><strong>Fontes</strong></p>
<p><a href="http://code.google.com/intl/pt-BR/webtoolkit/" target="_blank">http://code.google.com/intl/pt-BR/webtoolkit/</a></p>
<p><a href="http://www.gwt.com.br/" target="_blank">http://www.gwt.com.br/</a></p>
<p><a href="http://www.comp.ufscar.br/~bruno_abrahao/Trabalhos/Tutorial%20GWT.pdf" target="_blank">http://www.comp.ufscar.br/~bruno_abrahao/Trabalhos/Tutorial%20GWT.pdf</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.phpaulo.com.br/desenvolvimento/iniciando-com-o-gwt/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

