sexta-feira, 27 de agosto de 2010

Hexas

Conversão de long para string hexa:
Long.toHexString(long)

Conversão de string hexa para long:
Long.parseLong(String, 16)

sexta-feira, 20 de agosto de 2010

Como atualizar a tela e também fazer um download? Usando JSF/Richfaces

Hoje eu tive um problema relativamente comum: preciso tanto fazer uma ação (ie, salvar no banco, atualizar tela) e disponibilizar um arquivo gerado dinamicamente para o usuário.

O 'a4j:commandButton' não faz download. Quer dizer, até pode fazer, mas euzinha desconheço como.
Tentei fazer um 'h:commandButton' com 'a4j:support' no onComplete, mas não funciona. Então, recebi a sugestão ao contrário, onde o 'a4j:commandButton' chama o 'h:commandButton'. Funciona que é uma beleza.


<a4j:commandButton id="btnAjax" value="Atualiza a tela e faz download" action="#{mBeanWhateva.fazAcao}"  oncomplete="jQuery('[id$=btnDownload]').click()" reRender="o,que,vc,quiser"/>

<h:commandButton id="btnDownload" value="Faz o Download apenas" action="#{mBeanWhateva.fazDownload}" style="display:none"/>



public String finalizarSetup() {
// faz muita coisa
return null;
}



public String fazDownload() throws Exception {
        ByteArrayOutputStream meusDadosdoRelatorio = gerarRelatorio(); // do the trick
FacesContext context = FacesContext.getCurrentInstance();
HttpServletResponse response = (HttpServletResponse) context.getExternalContext().getResponse();
response.setContentType("application/force-download");
response.setHeader("Content-Disposition","attachment; filename=nomeDoArquiv.extensao");
OutputStream sos;
sos = response.getOutputStream();
sos.write(meusDadosdoRelatorio.toByteArray());
sos.flush();
sos.close();
context.responseComplete();

return null;
}

quarta-feira, 18 de agosto de 2010

JConsole no Tomcat

Aprendi hoje.

JConsole é um aplicativo para verificar desempenho, memória, essas coisas. Está dentro do bin do JDK.
Coloque no tomcat:

-Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.port=8004 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false
Rode o JConsole, chame pelo 'Remote Process' servidor:8004 e pronto ;)
Por alguma razão, sem o "=true" do primeiro parâmetro era possível ligar o tomcat, mas dava 'connection refused'.

quarta-feira, 11 de agosto de 2010

Url-pattern no tomcat

Tenho uma aplicação cuja autenticação é feita pelo contexto. A princípio, todas as páginas *.jsp e *,jsf estavam protegidas; todos os arquivos (jsp, imagens, css) estavam dentro da pasta 'pages', dentro de WEB-INF.

Precisei de uma página pública. Pensei com meus botões... 'hum, /pages/*.jsf  deve dar conta'. E quem disse que pode, né? Uma hora para entender o porque. Só pode OU definir a pasta OU definir a extensão, nunca os dois juntos

http://stackoverflow.com/questions/2714726/web-xml-are-url-pattern-tags-relative-to-each-other


In the Web application deployment descriptor, the following syntax is used to define mappings:
  • A string beginning with a ‘/’ character and ending with a ‘/*’ suffix is used for path mapping.
  • A string beginning with a ‘*.’ prefix is used as an extension mapping.
  • A string containing only the ’/’ character indicates the "default" servlet of the application. In this case the servlet path is the request URI minus the context path and the path info is null.
  • All other strings are used for exact matches only


Acreditem, eu xinguei muito. No fim, tive que proteger /pages/cada_pasta e cada um dos JSPs que estava dentro de pages direto. Empenho

Oie

Esse blogue é minha área de transferência, guardando para a posteridade. Uma hora eu arranjo um template decente, daí vai até parecer que trabalho com isso!