JSF - <h:commandButton> como abrir relatorio em outra página?

Boa tarde a todos.

Gostaria apenas de completar os comentários, que no meu caso
em específico, alteri o commandButtom de a4j para h.

Com isto, ficou tudo ok.

Abraços

Galera,
Só para deixa o tópico mais explicado.

Caso tenha mais de um botão na tela em JSF, e precise que o botão abra em uma nova página, esse botão é preciso ser do tipo <h:commandLink>, ou seja o Link e não um botão.

Assim pode usar os botões normais como <h:commandButton>, e botão que precise abrir em uma nova aba usar o <h:commandLink>.

&lt;h:commandLink&gt; id=&quot;visualizarPrescricao&quot; value=&quot;Visualizar&quot;  action=&quot;{consultaPrescricao.gerarRelatorioPrescricao()}&quot;  target=&quot;_blank&quot;  style=&quot;width:160px;&quot; /&gt;     

Ai os botões funcionam corretamente, e o Link abra em uma nova aba normal.
Sem que todos os botões abrem em nova aba por engano.

Valeu …

É só colocar um request.getServletContext().getRequestDispatcher no final do método emitirRelatorioSolicitacao() , para uma nova página jsp e colocar nessa nova página os valores que vão ser emitidos no relatório.

tipo assim:

request.getServletContext().getRequestDispatcher("/novaPagina.jsp").forward(request, response);

no caso se for uma página xhtml

é só colocar o return /novaPagina.xhtml;

no final do método q é chamado pelo <h:commandButton> ou <h:commandLink>

Consegui resolver esse problema da seguinte forma, no onclick vc coloca o target _blank e no onblur vc coloca o target em branco assim quando o cara clicar em qualquer outro link da página ele vai sair do botão e zerar o target.

<h:commandButton onclick=“this.form.target=’_blank’” onblur=“form.target=”’’" />