Apenas compartilhando o conhecimento, já que muito sobre o que consegui em nosso projeto foi extraído daqui…
Tinhamos um problema: Como alterar o target do botão para abrir uma tela em uma nova janela? Poderiamos alterar isso no Form? Sim, Mas isso afetava todos os botões. Por javascript? Até funciona, mas não adequadamente e como gerar um relatório em uma nova Janela?
Depois de vários tipos de resposta aqui do Forum e navegando pela net me veio o seguinte: “Será que não posso fazer um botão se comportar como um Hiperlink?” Mãos a obra:
É possível e simples, talvez não seja a forma “recomendada” mas funciona perfeitamente.
1-Crie um hiperlink na página JSF.
2- Na propriedade visible deixe o valor “false”
3- Altere a propriedade target para “_blank” ou o destino que quiser
4- No botão adcione isso na propriedade onClick -> "document.getElementById('nomeDoForm:nomeDoHiperlink').click();"
5- Agora é só fazer a festa no action do hiperlink, seu botão funcionará como se fosse um.
Espero que ajude a muitos… A nós ajudou bastante, mas quem tiver uma sugestão melhor poste aí… Essa foi a nossa solução…
Obs: Substituam o campo nomeDoForm e nomeDoHiperlink pelo ID que vocês estiverem utilizando nesses componentes…
Hum… Vc usa um Form em Ajax, estou engatinhando em JSF ainda, mas vou tentar te ajudar…
O action do seu botão está vinculado a um método que pode estar chamando o relatório na mesma tela… O botão não precisará estar vinculado a um action no Bean e sim o hiperlink (erro mais provável de estar acontecendo).
Javalente, eu fiz direitinho o que vc indicou, mas comigo não funcionou, eu não sei o porque…
Dê uma olhada: <s:link id="SLimprimir" value="Teste" action="#{chamadoEditBean.pdfChamado}" target="_blank"></s:link>
<h:commandButton
id="BTNimprimir" value="#{msg['padrao.botao.imprimir']}" onclick="javascript:document.getElementById('EFchamado:botoes:SLimprimir').click();" />
Olá pessoal estou desculpe estar retirando do fundo do baú, mas eu estava pesquisando sobre abrir outra página, deixando o botão virar um Hiperlink e depois de ler o resolvi deixando assim: