<?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; cidades</title>
	<atom:link href="http://www.phpaulo.com.br/tag/cidades/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>Instalando DWR em sua aplicação Java para criar o efeito de onchange de um combobox para outro</title>
		<link>http://www.phpaulo.com.br/ajax/instalando-dwr-em-sua-aplicacao-java-para-criar-o-efeito-de-onchange-de-um-combobox-para-outro/</link>
		<comments>http://www.phpaulo.com.br/ajax/instalando-dwr-em-sua-aplicacao-java-para-criar-o-efeito-de-onchange-de-um-combobox-para-outro/#comments</comments>
		<pubDate>Wed, 02 Dec 2009 14:25:10 +0000</pubDate>
		<dc:creator>phpaulo</dc:creator>
				<category><![CDATA[ajax]]></category>
		<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[cidades]]></category>
		<category><![CDATA[classico]]></category>
		<category><![CDATA[combo]]></category>
		<category><![CDATA[dwr]]></category>
		<category><![CDATA[estados]]></category>
		<category><![CDATA[Struts2]]></category>

		<guid isPermaLink="false">http://www.phpaulo.com.br/?p=39</guid>
		<description><![CDATA[Objetivo Este artigo tem como objetivo principal ser rápido, direto e ilustrar como criar um combobox (elemento select do HTML) de estados e no evento de onchange criar a lista de cidades a partir do estado. Como configurar A primeira &#8230; <a href="http://www.phpaulo.com.br/ajax/instalando-dwr-em-sua-aplicacao-java-para-criar-o-efeito-de-onchange-de-um-combobox-para-outro/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><strong>Objetivo</strong></p>
<p>Este artigo tem como objetivo principal ser rápido, direto e ilustrar como criar um <strong>combobox</strong> (elemento <strong>select</strong> do HTML) de estados e no evento de <strong>onchange</strong> criar a lista de cidades a partir do estado.</p>
<p><strong>Como configurar</strong></p>
<p>A primeira coisa que deve ser feita é acessar o site do framework DWR (<a href="http://directwebremoting.org/dwr/index.html">http://directwebremoting.org/dwr/index.html</a>) após isso, baixe à última versão estável do framework, no momento da escrita deste artigo a versão é <strong>2.0.5</strong>.</p>
<p>No próprio site do <strong>DWR</strong>, existe um tutorial <strong>Get Started</strong> que ensina passa a passo como instalar, configurar e ainda alguns exemplos do que pode ser feito e de como fazê-los. Neste artigo será feito um passo a passo mais resumido que o encontrado no site, caso queira mais detalhes, entre no site do framework. Abaixo segue um passo a passo do que deve ser feito:</p>
<p>1. Adicione a lib do DWR (<strong>dwr.jar</strong>) ao classpath da aplicação (copie o arquivo <strong>dwr.jar</strong> para a pasta <strong>WEB-INF/lib</strong>, por exemplo);</p>
<p>2. Adicione o seguinte trecho de código ao arquivo <strong>web.xml</strong>, que está dentro da pasta WEB-INF;</p>
<blockquote><p>&lt;servlet&gt;</p>
<p>&lt;servlet-name&gt;<span style="text-decoration: underline;">dwr</span>-invoker&lt;/servlet-name&gt;</p>
<p>&lt;servlet-class&gt;org.directwebremoting.servlet.DwrServlet&lt;/servlet-class&gt;</p>
<p>&lt;init-param&gt;</p>
<p>&lt;param-name&gt;debug&lt;/param-name&gt;</p>
<p>&lt;param-value&gt;true&lt;/param-value&gt;</p>
<p>&lt;/init-param&gt;</p>
<p>&lt;/servlet&gt;</p>
<p>&lt;servlet-mapping&gt;</p>
<p>&lt;servlet-name&gt;<span style="text-decoration: underline;">dwr</span>-invoker&lt;/servlet-name&gt;</p>
<p>&lt;url-pattern&gt;/<span style="text-decoration: underline;">dwr</span>/*&lt;/url-pattern&gt;</p>
<p>&lt;/servlet-mapping&gt;</p></blockquote>
<p>3. Crie dentro da pasta <strong>WEB-INF</strong> um arquivo chamado <strong>dwr.xml</strong>, adicione o seguinte conteúdo dentro dele (Este arquivo será explicado mais tarde);</p>
<blockquote><p>&lt;!DOCTYPE dwr PUBLIC</p>
<p>&#8220;-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN&#8221;</p>
<p>&#8220;http://getahead.org/dwr/dwr20.dtd&#8221;&gt;</p>
<p>&lt;dwr&gt;</p>
<p>&lt;allow&gt;</p>
<p>&lt;create creator=<em>&#8220;new&#8221;</em> javascript=<em>&#8220;AjaxDwr&#8221;</em>&gt;</p>
<p>&lt;param name=<em>&#8220;class&#8221;</em> value=<em>&#8220;br.com.phpaulo.dwr.exemplo.util.AjaxDwr&#8221;</em>/&gt;</p>
<p>&lt;/create&gt;</p>
<p>&lt;convert converter=<em>&#8220;bean&#8221;</em> match=<em>&#8221; br.com.phpaulo.dwr.exemplo.bean.Fornecedor&#8221;</em> /&gt;</p>
<p>&lt;convert converter=<em>&#8220;bean&#8221;</em> match=<em>&#8221; br.com.phpaulo.dwr.exemplo.bean.Municipio&#8221;</em> /&gt;</p>
<p>&lt;/allow&gt;</p>
<p>&lt;/dwr&gt;</p></blockquote>
<p>4. Pronto! Sua aplicação já está utilizando o framework DWR.</p>
<p><strong>Código Java e JavaScript</strong></p>
<p>Para atingir o objetivo do artigo que é ser simples e direto, assumimos que o código Java e a página JSP da aplicação estão prontas e somente necessitem de ajustes para o <strong>DWR</strong>, caso precise de mais algum suporte, deixe um comentário ou mande um e-mail para o autor. Vamos à parte visual para este exemplo. Adicione na sua página JSP a chamada das bibliotecas JavaScript necessárias:</p>
<blockquote><p>&lt;script type=<em>&#8216;text/javascript&#8217;</em> src=<em>&#8216;</em>&lt;%=request.getContextPath() %&gt;<em>/dwr/engine.js&#8217;</em>&gt;&lt;/script&gt;</p>
<p>&lt;script type=<em>&#8216;text/javascript&#8217;</em> src=<em>&#8216;</em>&lt;%=request.getContextPath() %&gt;<em>/dwr/util.js&#8217;</em>&gt;&lt;/script&gt;</p></blockquote>
<p>Quando o arquivo <strong>dwr.xml</strong> foi criado, adicionamos o seguinte bloco de código:</p>
<blockquote><p>&lt;create creator=<em>&#8220;new&#8221;</em> javascript=<em>&#8220;AjaxDwr&#8221;</em>&gt;</p>
<p>&lt;param name=<em>&#8220;class&#8221;</em> value=<em>&#8220;br.com.phpaulo.dwr.exemplo.util.AjaxDwr&#8221;</em>/&gt;</p>
<p>&lt;/create&gt;</p></blockquote>
<p>Este bloco significa que um <strong>novo</strong> arquivo JavaScript será criado e o nome desse arquivo será <strong>AjaxDwr</strong>, veja as opções no bloco acima, bem intuitivo não. O conteúdo desse arquivo será o mesmo que a classe Java que está mapeada no parâmetro <strong>value</strong> dentro da tag<strong> create</strong>, com todos os métodos dessa classe com uma função de retorno (<strong>callback</strong>).</p>
<p>Adicione na página que você deseja ter o suporte ao DWR a seguinte linha:</p>
<blockquote><p>&lt;script type=<em>&#8216;text/javascript&#8217;</em> src=<em>&#8216;</em>&lt;%=request.getContextPath() %&gt;<em>/dwr/interface/AjaxDwr.js&#8217;</em>&gt;&lt;/script&gt;</p></blockquote>
<p>Esta linha poderá ser alterada, tudo dependerá do nome que você der ao JavaScript da classe. O &lt;%=request.getContextPath() %&gt; é apenas para referenciar o contexto da aplicação. Com esse processo feito agora só precisamos criar a função JavaScript que será executada no evento <strong>onchange</strong> do combo de estados, essa função pode ser vista abaixo:</p>
<blockquote><p>1<strong>.function</strong> atualizaCombo() {</p>
<p>2.      <strong>var</strong> uf = dwr.util.getValue(&#8220;uf&#8221;);</p>
<p>3.      AjaxDwr.getCidades(uf, montaCombo);</p>
<p>4.}</p>
<p>5.</p>
<p>6.<strong>function</strong> montaCombo(data){</p>
<p>7.    dwr.util.removeAllOptions(&#8220;cidade&#8221;);</p>
<p>8.    dwr.util.addOptions(&#8220;cidade&#8221;, data, &#8220;idMunicipio&#8221;, &#8220;nmMunicipio&#8221;);</p>
<p>9.}</p></blockquote>
<p>Repare na função, usamos variáveis do DWR. Abaixo é explicado linha a linha o que é feito no código acima:</p>
<p>Linha 1. Declara a função <strong>atualizaCombo</strong>, sem parâmetro;</p>
<p>Linha 2. Armazena o valor selecionado no combo cujo <strong>id</strong> seja igual a <strong>uf;</strong></p>
<p>Linha 3. Invoca a classe <strong>AjaxDwr</strong>, definida no arquivo <strong>dwr.xml</strong> e chama o método <strong>getCidades </strong>passando como parâmetro o id do estado, através da variável <strong>uf</strong> definida na Linha 2 e chama uma função no <strong>callback</strong> da <strong>getCidades</strong>, chamar no callback, quer dizer que ela será executada quando o método <strong>getCidades</strong> da classe Java for concluído, no caso essa função chama <strong>montaCombo</strong> e deverá ser passada sem parâmetros, pois está implícito que ele recebe o retorno da função <strong>getCidades</strong>;</p>
<p>Linha 6. Declara a função <strong>montaCombo</strong>, recebendo como parâmetro a o retorno do método <strong>getCidades</strong>;</p>
<p>Linha 7. Remove todos os elementos <strong>&lt;option&gt; </strong>que o combo de tiver, essa função recebe como parâmetro o id do elemento que queremos remover as opções;</p>
<p>Linha 8. Adiciona toda a lista de elementos que vir de retorno do método <strong>getCidades,</strong> no caso, essas opções são as cidades, a assinatura do método é dwr.util.addOptions(id_do_elemento, conteúdo_de_retorno, campo_que_representa_o_value, campo_que_representa_o_texto_do_valor); Onde:</p>
<p><strong>id_do_elemento</strong>: representa o id do combo que deve receber os dados;</p>
<p><strong>conteúdo_de_retorno</strong>: representa o conteúdo que deve ser retornado pelo método, qualquer nome válido pode ser usado;</p>
<p><strong>campo_que_representa_o_value</strong>: nome do atributo que está definido no bean que representa o id;</p>
<p><strong>campo_que_representa_o_texto_do_valor</strong>: nome do atributo que está definido no bean que representa o texto a ser exibido no option.</p>
<p>Para mais informações de possibilidades de adicionar opções, veja o seguinte link <a href="http://directwebremoting.org/dwr/browser/util/lists.html">http://directwebremoting.org/dwr/browser/util/lists.html</a>.</p>
<p>O método <strong>getCidades </strong>da classe Java, deve ser um método simples, deve retornar uma lista de cidades, como o método abaixo:</p>
<blockquote><p><strong>public</strong> List&lt;Cidade&gt; getCidades(<strong>int</strong> idEstado){</p>
<p>List&lt;Cidade&gt; listaCidades = <strong>new</strong> ArrayList&lt;Cidade&gt;();</p>
<p><strong>if</strong>( idEstado &gt; 0 ) {</p>
<p><strong>try</strong> {</p>
<p>listaCidades = <strong>new</strong> CidadeDAO().getMunicipios(idEstado);</p>
<p>} <strong>catch</strong>(SQLException e){</p>
<p>e.printStackTrace();</p>
<p>}</p>
<p>}</p>
<p><strong>return</strong> listaCidades;</p>
<p>}</p></blockquote>
<p>Um detalhe importante para que isso funcione é que criemos um <em>converter</em> no <strong>DWR</strong> para que ele saiba qual <strong>bean</strong> pode converter, o por isso dessa linha no arquivo <strong>dwr.xml.</strong></p>
<blockquote><p>&lt;convert converter=<em>&#8220;bean&#8221;</em> match=<em>&#8221; br.com.phpaulo.dwr.exemplo.bean.Fornecedor&#8221;</em> /&gt;</p></blockquote>
<p>Para cada <strong>bean</strong> que for utilizar crie um <em>converter </em>para o DWR saber em quais classes ele pode converter e dessa forma realizar a conversão de forma correta.</p>
<p><strong>Conclusão</strong></p>
<p>Da forma que foi exibido acima, você poderá criar um <strong>combo</strong> com uma lista de opções de qualquer classe e no evento <strong>onchange</strong> filtrar opções para o próximo combo.</p>
<p>Caso o erro <strong>“data is null” </strong>for exibido, verifique se não esqueceu de configurar o converter, ou reveja as opções definidas no método <strong>addOptions.</strong></p>
<p>A idéia foi mostrar de forma clara e objetiva como criar o clássico caso de selecionar um estado e gerar a lista de cidades. Espero que aproveitem e que este artigo faça com que o seu trabalho fique mais produtivo.</p>
<p><strong>Links</strong></p>
<p><a href="http://directwebremoting.org/">http://directwebremoting.org/</a></p>
<p><a href="http://directwebremoting.org/dwr/introduction/getting-started.html">http://directwebremoting.org/dwr/introduction/getting-started.html</a></p>
<p><a href="http://directwebremoting.org/dwr/browser/util/lists.html">http://directwebremoting.org/dwr/browser/util/lists.html</a></p>
<p><a href="http://www.devmedia.com.br/articles/viewcomp.asp?comp=3733">http://www.devmedia.com.br/articles/viewcomp.asp?comp=3733</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.phpaulo.com.br/ajax/instalando-dwr-em-sua-aplicacao-java-para-criar-o-efeito-de-onchange-de-um-combobox-para-outro/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

