Fazendo um Botão em JSF atuar como Hiperlink (Resolvido)

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…

Abraços.

<a4j:form id="formPesquisaSolicitacao"> <h:outputLink id="outputLink" target="_blank" rendered="false">add</h:outputLink>

meu command button esta assim

<h:commandButton image="/imagens/report.png" action="#{PesquisaSolicitacaoMB.emitirRelatorioSolicitacao}" onclick="document.getElementById('formPesquisaSolicitacao:outputLink').click();" style="float:left"> <f:setPropertyActionListener target="#{PesquisaSolicitacaoMB.idSolicitacao}" value="#{solicitacao.pkSeqSolicitacaoSol}" /> <rich:toolTip> <span style="white-space:nowrap"> <strong>Emitir relatório</strong> da solicitação </span> <h:outputText value="#{solicitacao.pkSeqSolicitacaoSol}" style="font-weight: bold" /> </rich:toolTip> </h:commandButton>

soh que ele esta abrindo o pdf na mesma pagina

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();" />

Há alguma coisa de errado? :roll:

Olá…
dá para fazer assim que funciona legal.

<h:commandLink id="botaoImprimir2" target="_blank" immediate="true" action="#{FabricanteMB.imprimir}">
            <h:commandButton  image="/imagens/btn_impressora.gif"/>
</h:commandLink>

até mais
Rogério Cruz Sousa

a forma que o orogerio funciona perfeitamente, flw

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:

<p:commandButton id="btnExecutar" value="#{lblAplicativo.lblExecutar}" icon="ui-icon-play" style="float:right !important; margin-bottom: 10px;" onclick="javascript:window.open('../paginas/situacaoCargaESS.jsf', 'top=50,left=50,width=800,height=600,menubar=no,scrollbars=yes,Resizable=yes,status=no,titlebar=no')" action="#{beanCargaEntidadeSistemaSi.executaCargaEntidadeSistemaSi()}" update="@form" ajax="false" />

sendo que o (situacaoCargaESS.jsf) pode ser modificado para outras extensão como pdf (situacaoCargaESS.pdf) na qual uso funcionou de boa,