<?xml version='1.0' encoding='UTF-8'?><rss xmlns:atom='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' version='2.0'><channel><atom:id>tag:blogger.com,1999:blog-3521743926575648732</atom:id><lastBuildDate>Wed, 10 Feb 2010 19:31:38 +0000</lastBuildDate><title>Thiago Galbiatti Vespa</title><description></description><link>http://www.thiagovespa.com.br/</link><managingEditor>noreply@blogger.com (Thiago G. Vespa)</managingEditor><generator>Blogger</generator><openSearch:totalResults>5</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-3521743926575648732.post-4404748311778190297</guid><pubDate>Tue, 26 Jan 2010 00:10:00 +0000</pubDate><atom:updated>2010-01-25T22:17:30.837-02:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>java</category><category domain='http://www.blogger.com/atom/ns#'>JDeveloper 11g</category><title>ADF 11g adicionando auto sugestão em um input</title><description>&lt;p&gt;ADF 11g adicionando auto sugestão em um input no ADF 11g é muito simples criar, o auto complementar para campos inputText, vejamos um exemplo.&lt;br&gt;Crie um projeto ADF Faces no JDeveloper 11g.&lt;/p&gt; &lt;p&gt;Clique em New Application, coloque um nome para o projeto, selecione Generic Application e clique em next.&lt;br&gt;Na caixa &lt;strong&gt;Avaliable &lt;/strong&gt;selecione ADF Faces em clique no Add(ALT+D) veja:&lt;br&gt;&lt;br&gt;&lt;a href="http://lh3.ggpht.com/_4lt8NVgnE3E/S14ytya5FKI/AAAAAAAAACU/c82bmPTaU_Q/s1600-h/image4.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" align="left" src="http://lh5.ggpht.com/_4lt8NVgnE3E/S14yxrXQ0iI/AAAAAAAAACY/-BXCxZI3jcg/image_thumb2.png?imgmax=800" width="240" height="177"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Coloque um nome em seu projeto, clique em next se quiser alterar o nome padrão do primeiro pacote. Senão clique em Finish.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;br&gt;&lt;br&gt;Crie uma nova página JSF.&lt;br&gt;Adicione à página que acabou de criar um componente af:inputText veja:&lt;br&gt;&lt;br&gt;&lt;a href="http://lh3.ggpht.com/_4lt8NVgnE3E/S14yydFX-wI/AAAAAAAAACc/WIFni1Jhbe0/s1600-h/image13.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" align="left" src="http://lh3.ggpht.com/_4lt8NVgnE3E/S14yzjvKXrI/AAAAAAAAACg/s8Eix55atFU/image_thumb9.png?imgmax=800" width="240" height="117"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Com o botão direito clique sobre o inputText&lt;br&gt;Vá em &lt;strong&gt;Insert inside input text &lt;/strong&gt;e clique em &lt;strong&gt;ADF Faces.&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;font color="#000000"&gt;&lt;/font&gt;&lt;/strong&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;font color="#000000"&gt;&lt;/font&gt;&lt;/strong&gt;&amp;nbsp;&lt;br&gt;&lt;br&gt;&lt;/p&gt; &lt;p&gt;Na Janela que se abriu selecione &lt;strong&gt;Auto Suggest Behavior&lt;/strong&gt; e clique em ok.&lt;a href="http://lh6.ggpht.com/_4lt8NVgnE3E/S14y0xn4pXI/AAAAAAAAADE/LLkU-7xjSbU/s1600-h/image14%5B1%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; float: none; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/_4lt8NVgnE3E/S14y29-6QDI/AAAAAAAAADM/tGMAnLtiAM8/image14_thumb.png?imgmax=800" width="240" height="239"&gt;&lt;/a&gt; &lt;br&gt;&lt;br&gt;Aparecera a seguinte tela, para você setar o conjunto de itens que irá conter essa sugestão.&lt;br&gt;&lt;a href="http://lh4.ggpht.com/_4lt8NVgnE3E/S14y4BWFCZI/AAAAAAAAACs/1YI92qXyN3o/s1600-h/image21.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/_4lt8NVgnE3E/S14y5bfiMVI/AAAAAAAAACw/1iZpG8rYhF8/image_thumb13.png?imgmax=800" width="240" height="79"&gt;&lt;/a&gt;&amp;nbsp;&lt;br&gt;&lt;br&gt;Bom ainda não criamos nenhum bean para esse projeto, teremos que criar agora vejamos:&lt;br&gt;Clique na seta para baixo na tela acima, aparecerá uma nova janela, clique em &lt;strong&gt;Edit.&lt;/strong&gt;&lt;br&gt;Aparecerá outra janela em Managed Bean clique no botão &lt;strong&gt;New...&lt;br&gt;&lt;/strong&gt;Crie seu Managed Bean.&lt;br&gt;Em Method clique em &lt;strong&gt;New...&lt;/strong&gt; e de um nome para o método.&lt;br&gt;Ufaa =D&lt;br&gt;Veja:&lt;br&gt;&lt;br&gt;&lt;a href="http://lh6.ggpht.com/_4lt8NVgnE3E/S14y6im1M-I/AAAAAAAAAC0/CXzBeCUeB38/s1600-h/image25.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/_4lt8NVgnE3E/S14y8TwcgMI/AAAAAAAAAC4/KWpxYkpIOs4/image_thumb15.png?imgmax=800" width="240" height="106"&gt;&lt;/a&gt;&amp;nbsp;&lt;br&gt;&lt;br&gt;Agora clique em OK e depois OK novamente.&lt;br&gt;Para demonstração vou colocar alguns itens fixo. Veja a implementação do nosso método.&lt;/p&gt; &lt;p&gt; &lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 118.6%; padding-right: 4px; font-family: 'Courier New', courier, monospace; direction: ltr; height: 310px; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt; &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color: #008000"&gt;/**&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt;   2:&lt;/span&gt; &lt;span style="color: #008000"&gt; *&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum3"&gt;   3:&lt;/span&gt; &lt;span style="color: #008000"&gt; * @param parâmetro contém o texto passado pelo value no nosso input text&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum4"&gt;   4:&lt;/span&gt; &lt;span style="color: #008000"&gt; * @return&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum5"&gt;   5:&lt;/span&gt; &lt;span style="color: #008000"&gt; */&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum6"&gt;   6:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; List autoSugestao(String parametro) {&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum7"&gt;   7:&lt;/span&gt;     &lt;span style="color: #008000"&gt;//array de nomes para o exemplo&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum8"&gt;   8:&lt;/span&gt;     String[] itensNomes = {&lt;span style="color: #006080"&gt;"Abreu"&lt;/span&gt;,&lt;span style="color: #006080"&gt;"Gonçalves"&lt;/span&gt;,&lt;span style="color: #006080"&gt;"Junior"&lt;/span&gt;,&lt;span style="color: #006080"&gt;"Alexandre"&lt;/span&gt;,&lt;span style="color: #006080"&gt;"Andrade"&lt;/span&gt;};&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum9"&gt;   9:&lt;/span&gt;     &lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum10"&gt;  10:&lt;/span&gt;     &lt;span style="color: #008000"&gt;//Criando uma lista de SelectItem para o retorno que serão associados ao suggest&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum11"&gt;  11:&lt;/span&gt;     List&amp;lt;SelectItem&amp;gt; listNomesEncontrados = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; ArrayList&amp;lt;SelectItem&amp;gt;();&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum12"&gt;  12:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;for&lt;/span&gt; (String s : itensNomes) {&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum13"&gt;  13:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;if&lt;/span&gt;(s.startsWith(parametro) || s.endsWith(parametro))&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum14"&gt;  14:&lt;/span&gt;             listNomesEncontrados.add(&lt;span style="color: #0000ff"&gt;new&lt;/span&gt; SelectItem(s));&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum15"&gt;  15:&lt;/span&gt;     }&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum16"&gt;  16:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; listNomesEncontrados;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum17"&gt;  17:&lt;/span&gt; }&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;/div&gt;&lt;/div&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Muito simples não =), veja o exemplo, abaixo funcionando.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://lh4.ggpht.com/_4lt8NVgnE3E/S14y9Fo584I/AAAAAAAAAC8/qdtHfFQis0Q/s1600-h/image33.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 5px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_4lt8NVgnE3E/S14y-v_4F1I/AAAAAAAAADA/Uy0xHTUU5gc/image_thumb21.png?imgmax=800" width="240" height="117"&gt;&lt;/a&gt; &lt;br&gt;É isso ai pessoal fica a dica. e bons códigos.&lt;br&gt;Abaixo o download do projeto.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&amp;nbsp;&lt;iframe style="border-bottom: #dde5e9 1px solid; border-left: #dde5e9 1px solid; padding-bottom: 0px; background-color: #ffffff; margin: 3px; padding-left: 0px; width: 92px; padding-right: 0px; height: 120px; border-top: #dde5e9 1px solid; border-right: #dde5e9 1px solid; padding-top: 0px" marginheight="0" src="http://cid-bdbb1cfc95817194.skydrive.live.com/embedicon.aspx/JDeveloper/AutoSugestao.rar" frameborder="0" marginwidth="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;br&gt;Obrigado!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;Thiago Galbiatti Vespa&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3521743926575648732-4404748311778190297?l=www.thiagovespa.com.br' alt='' /&gt;&lt;/div&gt;</description><link>http://www.thiagovespa.com.br/2010/01/adf-11g-adicionando-auto-sugestao-em-um.html</link><author>noreply@blogger.com (Cássio Sousa)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-3521743926575648732.post-381120371714966860</guid><pubDate>Sat, 23 Jan 2010 01:20:00 +0000</pubDate><atom:updated>2010-01-22T23:20:28.444-02:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>java</category><category domain='http://www.blogger.com/atom/ns#'>JDeveloper 11g</category><title>ADF 11g gerenciando Popup via ManagedBean</title><description>&lt;p align="justify"&gt;Uma das características do ADF 11g, é poder gerenciar um Popup, por um ManagedBean.&lt;br&gt;Crie um projeto no JDeveloper 11G&lt;br&gt;Como exemplo vou criar um projeto simples somente com um view, um bean e uma Página jsp.&lt;/p&gt; &lt;p align="justify"&gt;Nesta Página insira um componente popup, dentro do popup insira um componente Dialog, para termos os botões ok e cancel por default.Set a propriedade&amp;nbsp; &lt;strong&gt;contentDelivery&lt;/strong&gt; como lazy assim garantimos um “refresh” nos componentes.&lt;br&gt;Insira também um componente OutputText, para vermos as modificações.&lt;/p&gt; &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_4lt8NVgnE3E/S1pOnnyNCfI/AAAAAAAAABc/KDCGz53D1FM/s1600-h/image27.png" target="_blank"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="JDeveloper com a P&amp;aacute;gina do Popup" border="0" alt="JDeveloper com a P&amp;aacute;gina do Popup" src="http://lh6.ggpht.com/_4lt8NVgnE3E/S1pOsPLzwJI/AAAAAAAAABo/OGrtFl0gX5k/image_thumb25.png?imgmax=800" width="660" height="420"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p align="justify"&gt;Agora criaremos um ManagedBean para a nossa aplicação, insira também um botão ou qualquer outro componente que gere um evento na página jsp. Defina sua propriedade PartialSubmit como true veja&lt;br&gt;&lt;br&gt;&lt;a href="http://lh4.ggpht.com/_4lt8NVgnE3E/S1pOultLc1I/AAAAAAAAABs/SATmsZXBUfM/s1600-h/image48.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_4lt8NVgnE3E/S1pOy3PjJCI/AAAAAAAAAB4/hR5kFiiX-fk/image_thumb44.png?imgmax=800" width="259" height="500"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Crie um Action para o botão e defina como corpo do método como abaixo&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt; &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; String actionChamaPopup() {&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt;   2:&lt;/span&gt;     FacesContext context = FacesContext.getCurrentInstance();&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum3"&gt;   3:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum4"&gt;   4:&lt;/span&gt;     StringBuilder script = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; StringBuilder();&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum5"&gt;   5:&lt;/span&gt;     script.append(&lt;span style="color: #006080"&gt;"var popup = AdfPage.PAGE.findComponent('"&lt;/span&gt;).append(&lt;span style="color: #006080"&gt;"popID"&lt;/span&gt;).append(&lt;span style="color: #006080"&gt;"'); "&lt;/span&gt;).append(&lt;span style="color: #006080"&gt;"if (!popup.isPopupVisible()) { "&lt;/span&gt;).append(&lt;span style="color: #006080"&gt;"var hints = {}; \n"&lt;/span&gt; +&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum6"&gt;   6:&lt;/span&gt;             &lt;span style="color: #006080"&gt;" hints[AdfRichPopup.HINT_ALIGN] = AdfRichPopup.ALIGN_AFTER_START;\n"&lt;/span&gt; +&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum7"&gt;   7:&lt;/span&gt;             &lt;span style="color: #006080"&gt;" hints[AdfRichPopup.HINT_ALIGN_ID] = 'botaoID';\n "&lt;/span&gt;).append(&lt;span style="color: #006080"&gt;"popup.show(hints);}"&lt;/span&gt;);&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum8"&gt;   8:&lt;/span&gt;     ExtendedRenderKitService erks =&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum9"&gt;   9:&lt;/span&gt;         Service.getService(context.getRenderKit(),&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum10"&gt;  10:&lt;/span&gt;                            ExtendedRenderKitService.&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;);&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum11"&gt;  11:&lt;/span&gt;     erks.addScript(context, script.toString());&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum12"&gt;  12:&lt;/span&gt;     setTexto(&lt;span style="color: #006080"&gt;"Exemplo"&lt;/span&gt;);&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum13"&gt;  13:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; null;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum14"&gt;  14:&lt;/span&gt; }&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;Neste método você descreve o script para chamar a popup,&amp;nbsp; define o alinhamento, e quem a popup deve pegar como base para se alinhar&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Posições de alinhamento&lt;br&gt;ALIGN_AFTER_START&lt;br&gt;ALIGN_AFTER_END&lt;br&gt;ALIGN_BEFORE_START&lt;br&gt;ALIGN_BEFORE_END&lt;br&gt;ALIGN_END_AFTER&lt;br&gt;ALIGN_END_BEFORE&lt;br&gt;ALIGN_START_AFTER&lt;br&gt;ALIGN_START_BEFORE&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Agora o projeto em execução&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://lh3.ggpht.com/_4lt8NVgnE3E/S1pO1X8H7kI/AAAAAAAAAB8/T8nhbdLWPd4/s1600-h/image%5B3%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/_4lt8NVgnE3E/S1pO2msxN-I/AAAAAAAAACA/cxgdvbeCcDU/image_thumb.png?imgmax=800" width="244" height="186"&gt;&lt;/a&gt; &lt;/p&gt;&lt;br /&gt;&lt;p&gt;Abaixo está o fonte do projeto, divirta-se :D&lt;br&gt;&lt;iframe style="padding-bottom: 0px; background-color: #fcfcfc; padding-left: 0px; width: 98px; padding-right: 0px; height: 115px; padding-top: 0px" title="Preview" marginheight="0" src="http://cid-bdbb1cfc95817194.skydrive.live.com/embedicon.aspx/JDeveloper/PopupGerenciamento.rar" frameborder="0" marginwidth="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;Thiago Galbiatti Vespa&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3521743926575648732-381120371714966860?l=www.thiagovespa.com.br' alt='' /&gt;&lt;/div&gt;</description><link>http://www.thiagovespa.com.br/2010/01/adf-11g-gerenciando-popup-via.html</link><author>noreply@blogger.com (Cássio Sousa)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-3521743926575648732.post-7456362455171271021</guid><pubDate>Wed, 14 Oct 2009 21:15:00 +0000</pubDate><atom:updated>2010-01-20T13:47:30.327-02:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>python</category><title>Suporte SSL no Python 2.6.2</title><description>Olá Pessoal.  &lt;br /&gt;Tive um problema que me tomou um certo tempo e gostaria de compartilhar a solução pra vocês.  &lt;br /&gt;Se você tem ssl na sua máquina e ao utilizar no Python recebe o seguinte erro: &lt;span style="font-style: italic;"&gt;your version of httplib doesn't support HTTPS&lt;/span&gt;, não importe quantas vezes você recompile o Python, achei a solução para os seus problemas: &lt;br /&gt;Abra o source do Python e modifique o seguinte arquivo Modules/Setup.dist  &lt;br /&gt;Descomente as linhas:&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;_ssl _ssl.c \&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;-DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;-L$(SSL)/lib -lssl -lcrypto  &lt;/span&gt;&lt;br /&gt;Compile e instale... pronto!  &lt;br /&gt;Teste da seguinte maneira:&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;# python&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;&amp;gt;&amp;gt;&amp;gt; import socket&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;&amp;gt;&amp;gt;&amp;gt; socket.ssl  &lt;/span&gt;&lt;br /&gt;ou  &lt;br /&gt;&lt;div style="font-family: courier new;"&gt;&amp;gt;&amp;gt;&amp;gt; import ssl  &lt;br /&gt;&lt;/div&gt;ou se você quer uma resposta melhorzinha:  &lt;br /&gt;&lt;div style="font-family: courier new;"&gt;&amp;gt;&amp;gt;&amp;gt; call hasattr(socket, "ssl") &lt;br /&gt;&lt;/div&gt;É isso aí!&lt;div class="blogger-post-footer"&gt;Thiago Galbiatti Vespa&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3521743926575648732-7456362455171271021?l=www.thiagovespa.com.br' alt='' /&gt;&lt;/div&gt;</description><link>http://www.thiagovespa.com.br/2010/01/em-manutencao.html</link><author>noreply@blogger.com (Thiago G. Vespa)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-3521743926575648732.post-1907909124634803428</guid><pubDate>Fri, 20 Mar 2009 06:08:00 +0000</pubDate><atom:updated>2010-01-20T13:42:04.645-02:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>java</category><category domain='http://www.blogger.com/atom/ns#'>weblogic</category><title>Autenticação Mútua no Oracle Weblogic 10.3</title><description>&lt;div class="entryContent"&gt;                             Estou utilizando autenticação mútua em um projeto e resolvi postar como fazer isso utilizando o Oracle Weblogic 10.3. Embora seja trabalhoso a configuração é bem simples.&lt;br /&gt;&lt;br /&gt;Antes disso, o que é Autenticação mútua?&lt;br /&gt;&lt;br /&gt;Autenticação mútua ou autenticação de duas vias é quando o cliente se autentica no servidor e o servidor se autentica com a aplicação cliente. Dessa forma a identidade dos dois se torna confiável. O cliente confia no servidor pois possui ele em sua base de confiança (trust store - servidor) e o servidor confia no cliente pelo mesmo motivo (trust store cliente). A autenticidade e a identidade do cliente e do servidor é feita utilizando certificados.&lt;br /&gt;&lt;br /&gt;Nós vamos utilizar aqui o padrão &lt;a href="http://en.wikipedia.org/wiki/X.509" target="_blank"&gt;X.509&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Mãos à obra.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Primeiro passo: Configurar o SSL simples:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;1. Adicionar o CA de teste no browser (ou outro CA - Verisign, ICP-Brasil, ...).&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;O CA ou Certificate authority é a entidade autoridade de certificação. Ela é responsavél por dizer quando um certificado é confiável ou não. Ela normalmente emite certificados.&lt;br /&gt;&lt;br /&gt;No firefox:&lt;br /&gt;Ferramentas, Opções (ou Editar, Preferências), Avançado, Criptografia, Autoridades, Importar&lt;br /&gt;&lt;br /&gt;No IE:&lt;br /&gt;Ferramentas, Opções da Internet, Conteúdo, Certificados, Autoridades de Certificação Raiz Confiáveis, Importar&lt;br /&gt;&lt;br /&gt;Para testes: utilizar o CA de teste localizado em:&lt;br /&gt;&lt;bea_home&gt;\wlserver_10.3\server\lib\CertGenCA.der&lt;br /&gt;&lt;br /&gt;e selecionar para confiar nesse CA.&lt;br /&gt;&lt;br /&gt;&lt;img alt="CAs" src="http://www.thiagovespa.com.br/images/CACertManager.png" style="height: 427px; width: 647px;" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;2. Configurar o SSL no server.&lt;/b&gt;&lt;br /&gt;No console do Weblogic, selecionar Environment, Servers e o seu server, General, habilitar SSL (SSL Listen Port Enabled), colocar uma porta SSL.&lt;br /&gt;&lt;br /&gt;Para testes: selecionar Keystores, utilizar Demo Identity e Demo Trust aplicar as alterações.&lt;br /&gt;Para produção: selecionar Keystores, utilizar Custom Identity e Custom Trust, configurar os dados do identity e do trust&lt;br /&gt;&lt;br /&gt;&lt;img alt="keystores" src="http://www.thiagovespa.com.br/images/configKeystores.png" style="height: 345px; width: 518px;" /&gt;&lt;br /&gt;&lt;br /&gt;Restartar o server.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;3. Acessar uma página para verificar se o SSL simples está funcionando.&lt;/b&gt; Por exemplo:&lt;br /&gt;&lt;br /&gt;https://localhost:7002/console&lt;br /&gt;&lt;br /&gt;&lt;img alt="SSL" src="http://www.thiagovespa.com.br/images/seguro.png" style="height: 37px; width: 134px;" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Segundo passo: Configurar o SSL de duas vias&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;1. Para testes, criar o certificado cliente ou em produção utilizar um já existente que seja confiável pelo servidor&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Executar o setDomainEnv.cmd do domínio para setar as variáveis de ambiente.&lt;br /&gt;&lt;br /&gt;Executar o CertGen&lt;br /&gt;&lt;br /&gt;&lt;code&gt; java utils.CertGen -certfile certfile.cer -keyfile keyfile.key -keyfilepass password -cn ThiagoVespa &lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;2. Converter para um formato conhecido do browser&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Alguns browsers não reconhecem o PEM/DER gerado então é necessária a conversão para PKCS&lt;br /&gt;&lt;br /&gt;&lt;code&gt; java utils.ImportPrivateKey -keystore ThiagoVespa.p12 -storepass password -storetype pkcs12 -keypass password -alias personal -certfile certfile.cer.pem -keyfile keyfile.key.pem -keyfilepass password&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;3. Carregar o certificado cliente no Browser ou utilizar algum dispositivo de segurança.&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;No Firefox:&lt;br /&gt;Ferramentas, Opções (ou Editar, Preferências), Avançado, Criptografia, Certificados (ou Disp de segurança), &lt;u&gt;Seus certificados&lt;/u&gt;, Importar o certificado com extensão p12.&lt;br /&gt;&lt;br /&gt;No IE:&lt;br /&gt;Ferramentas, Opções da Internet, Conteúdo, Certificados, &lt;u&gt;Pessoal&lt;/u&gt;, Importar o certificado com extensão p12.&lt;br /&gt;&lt;br /&gt;&lt;img alt="certificados" src="http://www.thiagovespa.com.br/images/MyCertManager.png" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;4. Configurar o servidor para requerer certificados do cliente&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;No console do weblogic, selecionar Environment, Servers e o seu server, SSL, Advanced, Alterar o Set Two Way Client Behavior para Client Certs Requested and Enforced, Aplicar alterações e reiniciar o servidor.&lt;br /&gt;&lt;br /&gt;&lt;img alt="Two Way" src="http://www.thiagovespa.com.br/images/twoway.png" style="height: 51px; width: 501px;" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;5. Accessar a página com o SSL de duas vias&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Accessar por exemplo o console:&lt;br /&gt;&lt;br /&gt;https://localhost:7002/console&lt;br /&gt;&lt;br /&gt;E o browser deverá pedir a você o certificado criado.&lt;br /&gt;&lt;br /&gt;&lt;img alt="requisição" src="http://www.thiagovespa.com.br/images/requestCert.png" style="height: 398px; width: 1010px;" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Pronto, a autenticação mútua está funcionando.&lt;br /&gt;&lt;/bea_home&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;Thiago Galbiatti Vespa&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3521743926575648732-1907909124634803428?l=www.thiagovespa.com.br' alt='' /&gt;&lt;/div&gt;</description><link>http://www.thiagovespa.com.br/2009/03/autenticacao-mutua-no-oracle-weblogic.html</link><author>noreply@blogger.com (Thiago G. Vespa)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-3521743926575648732.post-159175148619212218</guid><pubDate>Tue, 10 Mar 2009 13:06:00 +0000</pubDate><atom:updated>2010-01-20T13:46:37.686-02:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>java</category><category domain='http://www.blogger.com/atom/ns#'>lwuit</category><category domain='http://www.blogger.com/atom/ns#'>j2me</category><title>FileChooser com LWUIT</title><description>O &lt;a href="https://lwuit.dev.java.net/" target="_blank" title="LWUIT"&gt;LWUIT&lt;/a&gt; é um framework desenvolvido pela Sun Microsystems para facilitar o desenvolvimento de interface gráficas em celulares. Ele é bem parecido com o Swing para desktop.&lt;br /&gt;&lt;br /&gt;Fiquei conhecendo esse framework graças ao Antônio Marin Neto em seu &lt;a href="http://netomarin.blogspot.com/2008/05/uma-pequena-anlise-da-lwuit.html" target="_blank" title="Blog do Neto"&gt;blog&lt;/a&gt;, que aborda características do LWUIT como Recursos, Estabilidade, Desempenho e outros. Eu achei o LWUIT muito fácil de usar e com vários recursos, embora o tempo para iniciar um programa feito nele é um pouco grande. Nada que um loading screen não resolva.&lt;br /&gt;&lt;br /&gt;A criação do FileChooser veio da necessidade de trabalhar com arquivos em um projeto que estou desenvolvendo para um Wiki móvel. Em breve disponibilizarei os fontes do projeto como open source para o pessoal poder contribuir.&lt;br /&gt;&lt;br /&gt;O primeiro passo foi utilizar a &lt;a href="http://jcp.org/en/jsr/detail?id=75" target="_blank" title="JSR 75"&gt;JSR 75&lt;/a&gt; para manipular os arquivos. Para verificar se o dispositivo tem suporte a essa JSR, você pode utilizar o seguinte código:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: java;"&gt;public static boolean isJSR77Available() {&lt;br /&gt; // Verifica se a JSR 75 está disponível&lt;br /&gt; return System&lt;br /&gt;  .getProperty("microedition.io.file." +&lt;br /&gt;    "FileConnection.version")&lt;br /&gt;    != null;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;Os próximos código terão referências às classes Language e ExceptionHandler. A primeira foi utilizada para localização utilizando o editor de resources do LWUIT e a segunda é responsável por processar exceções. Posteriormente eu explico o funcionamento dessas duas classes. Para funcionar o código sem elas, basta você realizar o tratamento de erros da sua maneira e substituir a chamada de Language.getLocalizedString("...") por alguma outra String.&lt;br /&gt;&lt;br /&gt;Agora vamos criar uma classe utilitária (FileUtil) para trabalhar com arquivos. É necessário pegar o separador de arquivos, qual é a string de diretório que representa o nível superior e o prefixo para acessar arquivos.&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: java;"&gt;public final static String FILE_SEPARATOR = (System&lt;br /&gt;  .getProperty("file.separator") != null) ? System&lt;br /&gt;  .getProperty("file.separator") : "/";&lt;br /&gt;&lt;br /&gt;public final static String TOP_DIR = "..";&lt;br /&gt;public final static String FILE_PREFIX = "file:///";&lt;/pre&gt;&lt;pre class="brush: java;"&gt;&lt;/pre&gt;Para verificar se o caminho passado é uma raiz, utilizamos um workaround.&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: java;"&gt;public static boolean isRoot(String path) {&lt;br /&gt; // Operação sobre o path ao invés de verificar na lista de roots&lt;br /&gt; // Verifica se o primeiro separador de arquivo é o último caractere&lt;br /&gt; if (path != null&lt;br /&gt;   &amp;amp;&amp;amp; path.indexOf(FileUtil.FILE_SEPARATOR) != path.length() - 1) {&lt;br /&gt;  return false;&lt;br /&gt; }&lt;br /&gt; return true;&lt;br /&gt;}&lt;/pre&gt;&lt;pre class="brush: java;"&gt;&lt;/pre&gt;Depois é só utilizarmos o Connector.open para obter um FileConnection e executar as operações em arquivos.&lt;br /&gt;&lt;br /&gt;Com isso temos o seguinte arquivo:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: java;"&gt;package br.com.thiagovespa.mobwiki.util;&lt;br /&gt;&lt;br /&gt;import java.io.DataInputStream;&lt;br /&gt;import java.io.DataOutputStream;&lt;br /&gt;import java.io.IOException;&lt;br /&gt;import java.util.Enumeration;&lt;br /&gt;import java.util.Vector;&lt;br /&gt;&lt;br /&gt;import javax.microedition.io.Connector;&lt;br /&gt;import javax.microedition.io.file.FileConnection;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt; * Classe para manipulação de arquivos&lt;br /&gt; * &lt;br /&gt; * @author Thiago Galbiatti Vespa&lt;br /&gt; * &lt;br /&gt; */&lt;br /&gt;public final class FileUtil {&lt;br /&gt; public final static String FILE_SEPARATOR = (System&lt;br /&gt;   .getProperty("file.separator") != null) ? System&lt;br /&gt;   .getProperty("file.separator") : "/";&lt;br /&gt;&lt;br /&gt; public final static String TOP_DIR = "..";&lt;br /&gt; public final static String FILE_PREFIX = "file:///";&lt;br /&gt;&lt;br /&gt; /**&lt;br /&gt;  * Verifica se o caminho é uma raiz baseado na string passada, pode resultar&lt;br /&gt;  * em resultado falso caso seja passada um caminho inválido&lt;br /&gt;  * &lt;br /&gt;  * @param path&lt;br /&gt;  *            caminho a ser verificado&lt;br /&gt;  * @return verdadeiro se o formato da string for raiz&lt;br /&gt;  */&lt;br /&gt; public static boolean isRoot(String path) {&lt;br /&gt;  // Operação sobre o path ao invés de verificar na lista de roots&lt;br /&gt;  // Verifica se o primeiro separador de arquivo é o último caractere&lt;br /&gt;  if (path != null&lt;br /&gt;    &amp;amp;&amp;amp; path.indexOf(FileUtil.FILE_SEPARATOR) != path.length() - 1) {&lt;br /&gt;   return false;&lt;br /&gt;  }&lt;br /&gt;  return true;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; /**&lt;br /&gt;  * Cria um diretório&lt;br /&gt;  * &lt;br /&gt;  * @param path&lt;br /&gt;  *            diretório a ser criado&lt;br /&gt;  * @return true se o diretorio foi criado, false caso contrário&lt;br /&gt;  */&lt;br /&gt; public static boolean createDir(String path) {&lt;br /&gt;  FileConnection newDir = null;&lt;br /&gt;  try {&lt;br /&gt;   newDir = (FileConnection) Connector.open(FileUtil.FILE_PREFIX&lt;br /&gt;     + path + FileUtil.FILE_SEPARATOR, Connector.READ_WRITE);&lt;br /&gt;   if (!newDir.exists()) {&lt;br /&gt;    newDir.mkdir();&lt;br /&gt;    return true;&lt;br /&gt;   } else {&lt;br /&gt;    ExceptionHandler.handleException(new IOException(Language&lt;br /&gt;      .getLocalizedString("dirAlreadyExist")));&lt;br /&gt;   }&lt;br /&gt;  } catch (IOException e) {&lt;br /&gt;   ExceptionHandler.handleException(e);&lt;br /&gt;  } catch (SecurityException e) {&lt;br /&gt;   ExceptionHandler.handleException(e, Language&lt;br /&gt;     .getLocalizedString("securityExceptionDesc"));&lt;br /&gt;  } finally {&lt;br /&gt;   if (newDir != null) {&lt;br /&gt;    try {&lt;br /&gt;     newDir.close();&lt;br /&gt;    } catch (IOException e) {&lt;br /&gt;     ExceptionHandler.handleException(e);&lt;br /&gt;    }&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;  }&lt;br /&gt;  return false;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; /**&lt;br /&gt;  * Cria um novo arquivo&lt;br /&gt;  * &lt;br /&gt;  * @param path&lt;br /&gt;  *            arquivo a ser criado&lt;br /&gt;  * @return true se o arquivo foi criado, false caso contrário&lt;br /&gt;  */&lt;br /&gt; public static boolean createNewFile(String path, String content) {&lt;br /&gt;  FileConnection newFile = null;&lt;br /&gt;  DataOutputStream dos = null;&lt;br /&gt;  try {&lt;br /&gt;   newFile = (FileConnection) Connector.open(FileUtil.FILE_PREFIX&lt;br /&gt;     + path, Connector.READ_WRITE);&lt;br /&gt;   if (!newFile.exists()) {&lt;br /&gt;    newFile.create();&lt;br /&gt;    dos = newFile.openDataOutputStream();&lt;br /&gt;    dos.writeUTF(content);&lt;br /&gt;    dos.flush();&lt;br /&gt;    return true;&lt;br /&gt;   } else {&lt;br /&gt;    ExceptionHandler&lt;br /&gt;      .handleException(new IOException(Language&lt;br /&gt;        .getLocalizedString("file")&lt;br /&gt;        + path&lt;br /&gt;        + Language&lt;br /&gt;          .getLocalizedString("already exists!")));&lt;br /&gt;   }&lt;br /&gt;  } catch (IOException e) {&lt;br /&gt;   ExceptionHandler.handleException(e);&lt;br /&gt;  } catch (SecurityException e) {&lt;br /&gt;   ExceptionHandler.handleException(e, Language&lt;br /&gt;     .getLocalizedString("securityExceptionDesc"));&lt;br /&gt;  } finally {&lt;br /&gt;   try {&lt;br /&gt;    if (newFile != null) {&lt;br /&gt;     newFile.close();&lt;br /&gt;    }&lt;br /&gt;    if (dos != null) {&lt;br /&gt;     dos.close();&lt;br /&gt;    }&lt;br /&gt;   } catch (IOException e) {&lt;br /&gt;    ExceptionHandler.handleException(e);&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;  }&lt;br /&gt;  return false;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; /**&lt;br /&gt;  * Atualiza arquivo&lt;br /&gt;  * &lt;br /&gt;  * @param path&lt;br /&gt;  *            arquivo a ser atualizado&lt;br /&gt;  * @return true se o arquivo foi atualizado, false caso contrário&lt;br /&gt;  */&lt;br /&gt; public static boolean updateFile(String path, String content) {&lt;br /&gt;  FileConnection file = null;&lt;br /&gt;  DataOutputStream dos = null;&lt;br /&gt;  try {&lt;br /&gt;   file = (FileConnection) Connector.open(FileUtil.FILE_PREFIX + path,&lt;br /&gt;     Connector.READ_WRITE);&lt;br /&gt;&lt;br /&gt;   if (!file.exists()) {&lt;br /&gt;    // Cria se não existe&lt;br /&gt;    file.create();&lt;br /&gt;   } else {&lt;br /&gt;    // Trunca se já existe&lt;br /&gt;    file.truncate(0);&lt;br /&gt;   }&lt;br /&gt;   dos = file.openDataOutputStream();&lt;br /&gt;   dos.writeUTF(content);&lt;br /&gt;   dos.flush();&lt;br /&gt;   return true;&lt;br /&gt;&lt;br /&gt;  } catch (IOException e) {&lt;br /&gt;   ExceptionHandler.handleException(e);&lt;br /&gt;  } catch (SecurityException e) {&lt;br /&gt;   ExceptionHandler.handleException(e, Language&lt;br /&gt;     .getLocalizedString("securityExceptionDesc"));&lt;br /&gt;  } finally {&lt;br /&gt;   try {&lt;br /&gt;    if (file != null) {&lt;br /&gt;     file.close();&lt;br /&gt;    }&lt;br /&gt;    if (dos != null) {&lt;br /&gt;     dos.close();&lt;br /&gt;    }&lt;br /&gt;   } catch (IOException e) {&lt;br /&gt;    ExceptionHandler.handleException(e);&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;  }&lt;br /&gt;  return false;&lt;br /&gt;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public static boolean existsFile(String path) {&lt;br /&gt;  FileConnection file = null;&lt;br /&gt;  try {&lt;br /&gt;   file = (FileConnection) Connector.open(FileUtil.FILE_PREFIX + path,&lt;br /&gt;     Connector.READ);&lt;br /&gt;   if (file.exists()) {&lt;br /&gt;    return true;&lt;br /&gt;&lt;br /&gt;   }&lt;br /&gt;  } catch (IOException e) {&lt;br /&gt;   ExceptionHandler.handleException(e);&lt;br /&gt;  } catch (SecurityException e) {&lt;br /&gt;   ExceptionHandler.handleException(e, Language&lt;br /&gt;     .getLocalizedString("securityExceptionDesc"));&lt;br /&gt;  } finally {&lt;br /&gt;   try {&lt;br /&gt;    if (file != null) {&lt;br /&gt;     file.close();&lt;br /&gt;    }&lt;br /&gt;   } catch (IOException e) {&lt;br /&gt;    ExceptionHandler.handleException(e);&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;  }&lt;br /&gt;  return false;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; /**&lt;br /&gt;  * Lê um arquivo&lt;br /&gt;  * &lt;br /&gt;  * @param path&lt;br /&gt;  *            arquivo a ser lido&lt;br /&gt;  * @return conteúdo do arquivo&lt;br /&gt;  */&lt;br /&gt; public static String loadFile(String path) {&lt;br /&gt;  FileConnection file = null;&lt;br /&gt;  DataInputStream dis = null;&lt;br /&gt;  String retVal = null;&lt;br /&gt;  try {&lt;br /&gt;   file = (FileConnection) Connector.open(FileUtil.FILE_PREFIX + path,&lt;br /&gt;     Connector.READ);&lt;br /&gt;   if (file.exists()) {&lt;br /&gt;    dis = file.openDataInputStream();&lt;br /&gt;    retVal = dis.readUTF();&lt;br /&gt;&lt;br /&gt;   } else {&lt;br /&gt;    ExceptionHandler.handleException(new IOException("File " + path&lt;br /&gt;      + " do not exists!"));&lt;br /&gt;   }&lt;br /&gt;  } catch (IOException e) {&lt;br /&gt;   ExceptionHandler.handleException(e);&lt;br /&gt;  } catch (SecurityException e) {&lt;br /&gt;   ExceptionHandler.handleException(e, Language&lt;br /&gt;     .getLocalizedString("securityExceptionDesc"));&lt;br /&gt;  } finally {&lt;br /&gt;   try {&lt;br /&gt;    if (file != null) {&lt;br /&gt;     file.close();&lt;br /&gt;    }&lt;br /&gt;    if (dis != null) {&lt;br /&gt;     dis.close();&lt;br /&gt;    }&lt;br /&gt;   } catch (IOException e) {&lt;br /&gt;    ExceptionHandler.handleException(e);&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;  }&lt;br /&gt;  return retVal;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; /**&lt;br /&gt;  * Lê um diretório&lt;br /&gt;  * &lt;br /&gt;  * @param path&lt;br /&gt;  *            diretório a ser lido&lt;br /&gt;  * @return lista&lt;br /&gt;  */&lt;br /&gt; public static String[] loadDir(String path, String pattern) {&lt;br /&gt;  FileConnection dir = null;&lt;br /&gt;  String[] retVal = null;&lt;br /&gt;  Vector files = new Vector();&lt;br /&gt;  try {&lt;br /&gt;   dir = (FileConnection) Connector.open(FileUtil.FILE_PREFIX + path,&lt;br /&gt;     Connector.READ);&lt;br /&gt;   if (dir.exists()) {&lt;br /&gt;    Enumeration en = dir.list(pattern, true);&lt;br /&gt;    while (en.hasMoreElements()) {&lt;br /&gt;     String object = (String) en.nextElement();&lt;br /&gt;     files.addElement(object);&lt;br /&gt;    }&lt;br /&gt;    if (files != null) {&lt;br /&gt;     retVal = new String[files.size()];&lt;br /&gt;     files.copyInto(retVal);&lt;br /&gt;    }&lt;br /&gt;   } else {&lt;br /&gt;    ExceptionHandler.handleException(new IOException("File " + path&lt;br /&gt;      + " do not exists!"));&lt;br /&gt;   }&lt;br /&gt;  } catch (IOException e) {&lt;br /&gt;   ExceptionHandler.handleException(e);&lt;br /&gt;  } catch (SecurityException e) {&lt;br /&gt;   ExceptionHandler.handleException(e, Language&lt;br /&gt;     .getLocalizedString("securityExceptionDesc"));&lt;br /&gt;  } finally {&lt;br /&gt;   try {&lt;br /&gt;    if (dir != null) {&lt;br /&gt;     dir.close();&lt;br /&gt;    }&lt;br /&gt;   } catch (IOException e) {&lt;br /&gt;    ExceptionHandler.handleException(e);&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;  }&lt;br /&gt;  return retVal;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; /**&lt;br /&gt;  * Remove um diretório&lt;br /&gt;  * &lt;br /&gt;  * @param path&lt;br /&gt;  *            diretório a ser removido&lt;br /&gt;  * @return true se removido e false caso contrário&lt;br /&gt;  */&lt;br /&gt; public static boolean deleteDir(String path) {&lt;br /&gt;  FileConnection dir = null;&lt;br /&gt;  try {&lt;br /&gt;   dir = (FileConnection) Connector.open(FileUtil.FILE_PREFIX + path,&lt;br /&gt;     Connector.READ_WRITE);&lt;br /&gt;   if (dir.exists()) {&lt;br /&gt;    Enumeration en = dir.list("*", true);&lt;br /&gt;    while (en.hasMoreElements()) {&lt;br /&gt;     String object = (String) en.nextElement();&lt;br /&gt;     if (object.endsWith(FileUtil.FILE_SEPARATOR)) {&lt;br /&gt;      deleteDir(path + object);&lt;br /&gt;     } else {&lt;br /&gt;      deleteFile(path + object);&lt;br /&gt;     }&lt;br /&gt;&lt;br /&gt;    }&lt;br /&gt;    dir.delete();&lt;br /&gt;    dir.close();&lt;br /&gt;    return true;&lt;br /&gt;   } else {&lt;br /&gt;    ExceptionHandler.handleException(new IOException(Language&lt;br /&gt;      .getLocalizedString("file")&lt;br /&gt;      + path + Language.getLocalizedString("doNotExist")));&lt;br /&gt;&lt;br /&gt;   }&lt;br /&gt;  } catch (IOException e) {&lt;br /&gt;   ExceptionHandler.handleException(e);&lt;br /&gt;  } catch (SecurityException e) {&lt;br /&gt;   ExceptionHandler.handleException(e, Language&lt;br /&gt;     .getLocalizedString("securityExceptionDesc"));&lt;br /&gt;  } finally {&lt;br /&gt;   try {&lt;br /&gt;    if (dir != null) {&lt;br /&gt;     dir.close();&lt;br /&gt;    }&lt;br /&gt;   } catch (IOException e) {&lt;br /&gt;    ExceptionHandler.handleException(e);&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;  }&lt;br /&gt;  return false;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; /**&lt;br /&gt;  * Remove um arquivo&lt;br /&gt;  * &lt;br /&gt;  * @param path&lt;br /&gt;  *            arquivo a ser removido&lt;br /&gt;  * @return true se removido e false caso contrário&lt;br /&gt;  */&lt;br /&gt; public static boolean deleteFile(String path) {&lt;br /&gt;  FileConnection file = null;&lt;br /&gt;  try {&lt;br /&gt;   file = (FileConnection) Connector.open(FileUtil.FILE_PREFIX + path,&lt;br /&gt;     Connector.READ_WRITE);&lt;br /&gt;   if (file.exists()) {&lt;br /&gt;    file.delete();&lt;br /&gt;    file.close();&lt;br /&gt;    return true;&lt;br /&gt;   } else {&lt;br /&gt;    ExceptionHandler.handleException(new IOException(Language&lt;br /&gt;      .getLocalizedString("file")&lt;br /&gt;      + path + Language.getLocalizedString("doNotExist")));&lt;br /&gt;&lt;br /&gt;   }&lt;br /&gt;  } catch (IOException e) {&lt;br /&gt;   ExceptionHandler.handleException(e);&lt;br /&gt;  } catch (SecurityException e) {&lt;br /&gt;   ExceptionHandler.handleException(e, Language&lt;br /&gt;     .getLocalizedString("securityExceptionDesc"));&lt;br /&gt;  } finally {&lt;br /&gt;   try {&lt;br /&gt;    if (file != null) {&lt;br /&gt;     file.close();&lt;br /&gt;    }&lt;br /&gt;   } catch (IOException e) {&lt;br /&gt;    ExceptionHandler.handleException(e);&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;  }&lt;br /&gt;  return false;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;}&lt;/pre&gt;&lt;pre class="brush: java;"&gt;&lt;/pre&gt;No próximo post a gente parte para a parte gráfica do FileChooser.&lt;br /&gt;&lt;br /&gt;Até a próxima!&lt;div class="blogger-post-footer"&gt;Thiago Galbiatti Vespa&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3521743926575648732-159175148619212218?l=www.thiagovespa.com.br' alt='' /&gt;&lt;/div&gt;</description><link>http://www.thiagovespa.com.br/2010/01/filechooser-com-lwuit.html</link><author>noreply@blogger.com (Thiago G. Vespa)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item></channel></rss>