<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-6521770042394799417</id><updated>2011-08-05T08:00:09.892-07:00</updated><category term='AJAX'/><category term='Page design'/><category term='JSP'/><category term='CSS'/><category term='Javascript'/><title type='text'>Java e Script</title><subtitle type='html'>Seleção de soluções para problemas no desenvolvimento web com java, jsp, javascript e xml</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://javaescript.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6521770042394799417/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://javaescript.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Guilherme Hermeto</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-kwu_-6BTh7c/TjwFKm0kIvI/AAAAAAAAACI/4G11jSWVQV0/s220/icn_reasonably_small.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>3</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6521770042394799417.post-8735796195292303878</id><published>2007-07-25T16:20:00.000-07:00</published><updated>2007-07-25T12:32:33.134-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JSP'/><category scheme='http://www.blogger.com/atom/ns#' term='Javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='AJAX'/><title type='text'>Como realizar requisições AJAX fora do domínio</title><content type='html'>&lt;span style="font-size:85%"&gt;O Firefox tem um dispositivo de segurança que impede que requisições AJAX sejam realizadas entre domínios. Mas muitas vezes precisamos deste tipo de requisição. Existem métodos para burlar essa segurança, mas vou mostar o método mais simples aqui.&lt;br /&gt;&lt;br /&gt;Você deve criar uma página server-side (JSP, ASP ou PHP) que busque a &lt;em&gt;URL&lt;/em&gt; para você e então você pode fazer a requisição AJAX para uma página em seu domínio. Um exeplo usando JSP e JSTL (&lt;em&gt;tag library&lt;/em&gt;) seria assim:&lt;br /&gt;&lt;br /&gt;&lt;div style="background-color:#dddddd;color:#000000;font-family:courier new; font-size:95%;padding:5px;"&gt;&lt;br /&gt;&amp;lt;%@page contentType="text/xml"&lt;br /&gt;%&gt;&amp;lt;%@page pageEncoding="UTF-8"&lt;br /&gt;%&gt;&amp;lt;%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"&lt;br /&gt;%&gt;&amp;lt;c:import url="${param.url}"&gt;&amp;lt;/c:import&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;É isso mesmo. apenas 4 linhas de código, que facilmente poderiam virar 3. Quem conhce JSP sabe do que eu estou falando.&lt;br /&gt;&lt;br /&gt;Para o JSTL funcionar, você precisa ter a biblioteca JSTL no diretorio &lt;em&gt;lib&lt;/em&gt; de sua aplicação ou no diretório &lt;em&gt;common/lib&lt;/em&gt; do &lt;em&gt;Tomcat&lt;/em&gt; (não saberia dizer ao certo o diretório correto para outros &lt;em&gt;containers&lt;/em&gt;).&lt;br /&gt;&lt;br /&gt;Agora, você deve repara que estou fechando (%&gt;) cada &lt;em&gt;TAG&lt;/em&gt; na linha posterior. Isso foi uma dica que aprendi para tirar as linhas em branco que o &lt;em&gt;Tomcat&lt;/em&gt; coloca nas páginas quando você insere uma &lt;em&gt;TAG JSP&lt;/em&gt;. Isso é muito útil para quando você vai fazer um request de um documento XML. O Firefox só aceita documentos XML que começam na primeira linha do documento.&lt;br /&gt;&lt;br /&gt;Como usar?&lt;br /&gt;&lt;br /&gt;Supondo que você salvou a sua página JSP como &lt;em&gt;ajax.jsp&lt;/em&gt;, no método que faz a requisição você vai usar o URL:&lt;br /&gt;&lt;br /&gt;&lt;div style="background-color:#dddddd;color:#000000;font-family:courier new; font-size:95%;padding:5px;"&gt;&lt;br /&gt;ajax.jsp?url=URL_REAL_QUE_VOCÊ_DESEJA&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;por exemplo:&lt;br /&gt;&lt;br /&gt;&lt;div style="background-color:#dddddd;color:#000000;font-family:courier new; font-size:95%;padding:5px;"&gt;&lt;br /&gt;ajax.jsp?url=http://www.google.com&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Espero que esta postagem seja útil para vocês.&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6521770042394799417-8735796195292303878?l=javaescript.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javaescript.blogspot.com/feeds/8735796195292303878/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6521770042394799417&amp;postID=8735796195292303878' title='3 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6521770042394799417/posts/default/8735796195292303878'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6521770042394799417/posts/default/8735796195292303878'/><link rel='alternate' type='text/html' href='http://javaescript.blogspot.com/2007/07/como-realizar-requisies-ajax-fora-do.html' title='Como realizar requisições AJAX fora do domínio'/><author><name>Guilherme Hermeto</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-kwu_-6BTh7c/TjwFKm0kIvI/AAAAAAAAACI/4G11jSWVQV0/s220/icn_reasonably_small.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6521770042394799417.post-5969043583380102451</id><published>2007-07-25T00:00:00.000-07:00</published><updated>2007-07-25T12:30:31.903-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CSS'/><category scheme='http://www.blogger.com/atom/ns#' term='Page design'/><title type='text'>Transparências sem PNG (e caixa de diálogo modal)</title><content type='html'>&lt;span style="font-size:85%"&gt;Muitas vezes vi artigos e posts afirmando que é impossível se ter transparêcia com compatibilidade para diversos navegadores utilizando somente CSS, mas isto não é verdade. É possivel sim conseguir transparencia sem o uso de imagens.&lt;br /&gt;&lt;br /&gt;Supondo que queremos um DIV semi-transparente (50% opaco), podemos criar um código de estilo (css):&lt;br /&gt;&lt;br /&gt;&lt;div style="background-color:#dddddd;color:#000000;font-family:courier new; font-size:90%;padding:5px;"&gt;&lt;br /&gt;.transparente {&lt;br /&gt;&lt;div style="padding-left:15px;"&gt;&lt;br /&gt;   filter:progid:DXImageTransform.Microsoft.Alpha(opacity=50) !important; &lt;br /&gt;   opacity: .5; &lt;br /&gt;   -moz-opacity: .5; &lt;br /&gt;   -khtml-opacity: .5;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;e usá-lo em um &lt;em&gt;DIV&lt;/em&gt; com &lt;em&gt;class="transparente"&lt;/em&gt;.&lt;br /&gt;&lt;br /&gt;Entretanto, tudo que você colocar dentro deste &lt;em&gt;DIV&lt;/em&gt; ficará com esta transparência. Mesmo que você coloque dentro do &lt;em&gt;DIV&lt;/em&gt; transparente um &lt;em&gt;DIV&lt;/em&gt; com os filtros setados para 100% da opacidade, os elementos dentro deste &lt;em&gt;DIV&lt;/em&gt; opaco continuarão transparentes.&lt;br /&gt;&lt;br /&gt;Então como colocar elementos opacos dentro de um &lt;em&gt;DIV&lt;/em&gt; com transparência feita por este método? Não coloca dentro. Coloque na frente!&lt;br /&gt;&lt;br /&gt;Isso acarreta que os elementos sólidos não estarão dentro do código do &lt;em&gt;DIV&lt;/em&gt; transparente, mas em outro &lt;em&gt;DIV&lt;/em&gt; posicionado à frente. Você consegue fazer isso setando a propriedade &lt;em&gt;position&lt;/em&gt; para &lt;em&gt;absolute&lt;/em&gt; e posicionando o &lt;em&gt;DIV&lt;/em&gt; opaco na frente do transparente usando as propriedades &lt;em&gt;top&lt;/em&gt; e &lt;em&gt;left&lt;/em&gt; (Também é sensato neste caso fazer o mesmo com o &lt;em&gt;DIV&lt;/em&gt; transparente).&lt;br /&gt;&lt;br /&gt;Ok, se a transparência for ocupar somente parte da tela e você precisar de elementos sólidos dentro do &lt;em&gt;DIV&lt;/em&gt; transparente, este não é um método ideal. Mas no meu caso, eu queria construir um caixa de diálogo modal (que só permite que se use o resto do sistema após a caixa ter sido fechada).&lt;br /&gt;&lt;br /&gt;Para tal, criei um &lt;em&gt;DIV&lt;/em&gt; transparente e o coloquei na posição &lt;em&gt;top:0px&lt;/em&gt; e &lt;em&gt;left:0px&lt;/em&gt;, também com &lt;em&gt;width&lt;/em&gt; e &lt;em&gt;height&lt;/em&gt; iguais a 100% da página (na verdade IE requer &lt;em&gt;width:103%;height:101.5%&lt;/em&gt; e Firefox requer &lt;em&gt;width:100%;height:120%&lt;/em&gt; mas não me perguntem porque) e claro com &lt;em&gt;display:none&lt;/em&gt;. Lembre-se que para o &lt;em&gt;height&lt;/em&gt; fucionar, você deve setar o &lt;em&gt;height&lt;/em&gt; do &lt;em&gt;body&lt;/em&gt; para 100% também.&lt;br /&gt;&lt;br /&gt;Então criei outro &lt;em&gt;DIV&lt;/em&gt; (fora do &lt;em&gt;DIV&lt;/em&gt; transparente), posicionei no meio da página e quando quero exibir o diálogo modal, seto display do &lt;em&gt;DIV&lt;/em&gt; transparente e do sólido para &lt;em&gt;block&lt;/em&gt;. É prudente também que você use a propriedade &lt;em&gt;z-index&lt;/em&gt; para o &lt;em&gt;DIV&lt;/em&gt; sólido sempre aparecer na frente do &lt;em&gt;DIV&lt;/em&gt; transparente.&lt;br /&gt;&lt;br /&gt;É isso. Caso você não saiba como posicionar um &lt;em&gt;DIV&lt;/em&gt; no meio da tela independentemente da resolução do usuário é só perguntar que eu escrevo aqui minha função javascript que faz isso.&lt;br /&gt;&lt;br /&gt;O código fica mais ou menos assim:&lt;br /&gt;&lt;br /&gt;&lt;div style="background-color:#dddddd;color:#000000;font-family:courier new; font-size:90%;padding:5px;"&gt;&lt;br /&gt;body {&lt;br /&gt;&lt;div style="padding-left:15px;"&gt;&lt;br /&gt;height:100%;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;}&lt;br /&gt;.transparente {&lt;br /&gt;&lt;div style="padding-left:15px;"&gt;&lt;br /&gt;position: absolute;&lt;br /&gt;top:0px;&lt;br /&gt;left:0px;&lt;br /&gt;width:103%;&lt;br /&gt;height:101.5%;&lt;br /&gt;border: none;&lt;br /&gt;background-color:#aaa;&lt;br /&gt;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=50) !important; &lt;br /&gt;opacity: .5; &lt;br /&gt;-moz-opacity: .5; &lt;br /&gt;-khtml-opacity: .5;&lt;br /&gt;overflow:hidden;&lt;br /&gt;display:none;&lt;br /&gt;z-index: 5;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;}&lt;br /&gt;html&gt;body .transparente {&lt;br /&gt;&lt;div style="padding-left:15px;"&gt;&lt;br /&gt;width:100%;&lt;br /&gt;height:120%;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;.solido{&lt;br /&gt;&lt;div style="padding-left:15px;"&gt;&lt;br /&gt;position: absolute;&lt;br /&gt;top:0px;&lt;br /&gt;left:0px;&lt;br /&gt;width:102%;&lt;br /&gt;height:101%;&lt;br /&gt;border: none;&lt;br /&gt;display:none;&lt;br /&gt;z-index: 10;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;}&lt;br /&gt;html&gt;body .solido{&lt;br /&gt;&lt;div style="padding-left:15px;"&gt;&lt;br /&gt;width:100%;&lt;br /&gt;height:100%;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Aqui vocês vêem o uso de &lt;em&gt;html&gt;body .estilo&lt;/em&gt;, que é um &lt;em&gt;CSS hack&lt;/em&gt;. IE não interpreta esses códigos, então quando você precisa de estilos diferentes para o Firefox e IE isso ajuda muito.&lt;br /&gt;&lt;br /&gt;Qualquer &lt;em&gt;DIV&lt;/em&gt; que você colocar dentro do &lt;em&gt;DIV&lt;/em&gt; da classe solido terá 100% de opacidade.&lt;br /&gt;&lt;br /&gt;Parece que no código, o &lt;em&gt;!important&lt;/em&gt; no filtro da microsoft saiu em duas linhas, mas é em uma só. Deve aparecer logo após o filtro.&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6521770042394799417-5969043583380102451?l=javaescript.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javaescript.blogspot.com/feeds/5969043583380102451/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6521770042394799417&amp;postID=5969043583380102451' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6521770042394799417/posts/default/5969043583380102451'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6521770042394799417/posts/default/5969043583380102451'/><link rel='alternate' type='text/html' href='http://javaescript.blogspot.com/2007/07/transparncias-sem-png-e-caixa-de-dilogo.html' title='Transparências sem PNG (e caixa de diálogo modal)'/><author><name>Guilherme Hermeto</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-kwu_-6BTh7c/TjwFKm0kIvI/AAAAAAAAACI/4G11jSWVQV0/s220/icn_reasonably_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6521770042394799417.post-3421957033572305265</id><published>2007-07-24T18:20:00.000-07:00</published><updated>2007-07-25T12:28:29.431-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='AJAX'/><title type='text'>Como se livrar do erro 0x80040111 (NS_ERROR_NOT_AVAILABLE) do Firefox</title><content type='html'>&lt;span style="font-size:85%;"&gt;&lt;br /&gt;Construindo uma aplicação complexa para a web, me deparei várias vezes com o erro código: 0x80040111 (NS_ERROR_NOT_AVAILABLE) no Firefox. Gastei bastante tempo procurando no Google alguma página ou post que me explicasse o porque deste erro.&lt;br /&gt;&lt;br /&gt;Depois de muita procura, me deparei com o &lt;a href="http://radio.javaranch.com/pascarello/2006/02/07/1139345471027.html"&gt;Eric's weblog&lt;/a&gt;. Nele, Eric explica que o erro é causado por:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:90%;color:#000099;"&gt;Mozilla calls onload() for all HTTP transactions that succeeded. The only time it calls onerror() is when a network error happened. Inside the onerror handler, accessing the status attribute results in this exception:&lt;br /&gt;&lt;br /&gt;Error: [Exception... "Component returned failure code: 0x80040111&lt;br /&gt;(NS_ERROR_NOT_AVAILABLE) [nsIXMLHttpRequest.status]" nsresult: "0x80040111&lt;br /&gt;(NS_ERROR_NOT_AVAILABLE)" location: "JS frame ::&lt;br /&gt;file:///Users/chuck/errtest.html :: anonymous :: line 114" data: no]&lt;br /&gt;Source File: file:///Users/chuck/errtest.html&lt;br /&gt;Line: 114&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;E que uma solução rápida seria adicionar um &lt;em&gt;try/catch&lt;/em&gt; quando estivesse lendo a propriedade status do objeto.&lt;br /&gt;&lt;br /&gt;Para aquele problema específico, funcionou perfeitamente e como eu estava fazendo apenas &lt;em&gt;insert&lt;/em&gt; no banco de dados para salvar as preferências de usuário, que era executado cada vez que o usuário executasse alguma função, achei que não era absolutamente necessário tratar um possível erro.&lt;br /&gt;&lt;br /&gt;O problema reapareceu quando eu precisei tratar um &lt;em&gt;select&lt;/em&gt; que era acionado dentro de um &lt;em&gt;iFrame&lt;/em&gt;, mas que seu resultado deveria aparecer no &lt;em&gt;parent&lt;/em&gt;. Eu simplesmente precisava de todos os dados, inclusive da propriedade status.&lt;br /&gt;&lt;br /&gt;Então voltei a procurar no Google algo que me ajudasse. Depois de muito tempo achei uma dica no site &lt;a href="http://www.matthom.com/archive/2006/05/15/scary-ajax-error"&gt;matthom&lt;/a&gt; que me ajudou a entender melhor problema e me deu uma solução.&lt;br /&gt;&lt;br /&gt;Segundo o texto, o problema ocorre quando você tenta realzar uma requisição AJAX e submete e formulário ao mesmo tempo. Então era só trocar o &lt;em&gt;INPUT TYPE='submit'&lt;/em&gt; para &lt;em&gt;INPUT TYPE='button'&lt;/em&gt; e o problema seria resolvido.&lt;br /&gt;&lt;br /&gt;Entretanto, no meu caso eu não estava enviando dados de um formulário. A função era executada em um link no evento &lt;em&gt;onClick&lt;/em&gt;. Então essa solução não se aplicava ao meu caso.&lt;br /&gt;&lt;br /&gt;Por sorte, ao ler um dos comentários vi que se utilizasse um 'return false;' teria mesmo efeito e resolvi tentar colocar o 'return false;' após a chamada da função no link.&lt;br /&gt;&lt;br /&gt;Funcionou perfeitamente. Parei de receber o erro, pois o link, apesar de ter &lt;em&gt;'href="#"'&lt;/em&gt;, causa o mesmo impacto no Firefox que tentar submeter um formulário mesmo sem o atributo &lt;em&gt;action&lt;/em&gt;.&lt;br /&gt;&lt;br /&gt;Isso me ajudou a entender porque eu não recebia essa mensagem de erro ao tentar submeter meus formulários com AJAX. Na minha &lt;em&gt;TAG FORM&lt;/em&gt; eu sempre coloco &lt;em&gt;onSubmit='return false;'&lt;/em&gt;. Se vocês querem enviar dados de um formulário por AJAX, eu recomendo o uso do evento &lt;em&gt;onSubmit&lt;/em&gt;. Fica mais elegante do que mudar o &lt;em&gt;INPUT&lt;/em&gt; para &lt;em&gt;button&lt;/em&gt;.&lt;br /&gt;&lt;br /&gt;Espero que este texto ajude vocês com o mesmo problema.&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6521770042394799417-3421957033572305265?l=javaescript.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javaescript.blogspot.com/feeds/3421957033572305265/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6521770042394799417&amp;postID=3421957033572305265' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6521770042394799417/posts/default/3421957033572305265'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6521770042394799417/posts/default/3421957033572305265'/><link rel='alternate' type='text/html' href='http://javaescript.blogspot.com/2007/07/como-se-livrar-do-erro-0x80040111.html' title='Como se livrar do erro 0x80040111 (NS_ERROR_NOT_AVAILABLE) do Firefox'/><author><name>Guilherme Hermeto</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-kwu_-6BTh7c/TjwFKm0kIvI/AAAAAAAAACI/4G11jSWVQV0/s220/icn_reasonably_small.jpg'/></author><thr:total>0</thr:total></entry></feed>
