rollei
Janeiro 28, 2009, 9:45am
#1
Tenho esse commandButton
<h:commandButton image="/imagens/report.png"
action="#{PesquisaSolicitacaoMB.emitirRelatorioSolicitacao}"
onclick="if (!confirm('Tem certeza que deseja EMITAR RELATÒRIO da solicitação #{solicitacao.pkSeqSolicitacaoSol}?')) return false"
style="float:left"
rendered="#{renderBotaoEmitirRelatSolicitacao}">
<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>
que chama esse código (resumido para não pesar muito):
FacesContext facesContext = FacesContext.getCurrentInstance();
ServletContext servletContext = (ServletContext) facesContext.
getExternalContext().getContext();
String dirBase = servletContext.getRealPath("");
String caminhoImagem = dirBase + PropertiesHelper.getInstance().
getProperty("sdp.properties", "report.image.dir").
replace(
"[BARRA]", File.separator);
String caminhoJasper = dirBase + PropertiesHelper.getInstance().
getProperty("sdp.properties", "report.jasper.dir").
replace(
"[BARRA]", File.separator);
Map parametros = new HashMap();
parametros.put("SUBREPORT_DIR", caminhoJasper);
parametros.put("IMAGES_URI", caminhoImagem);
parametros.put("PK_SEQ_SOLICITACAO_SOL", idSolicitacao);
stream = service.gerarRelatorioBD(parametros, caminhoJasper +
"SDP-RelatorioSolicitacao01.jasper");
HttpServletResponse res = (HttpServletResponse) facesContext.
getExternalContext().getResponse();
res.setContentType("application/pdf");
res.setHeader("Pragma", "public");
res.setHeader("Cache-control", "must-revalidate");
FacesContext.getCurrentInstance().responseComplete();
Do jeito que está atualmente o relatório está abrindo na mesma página, quebrando a navegação. Queria uma dica da melhor maneira de fazer esse commandButton abrir esse PDF em outra página. De preferência com um exemplo de código.
[]'s
Gbzao
Janeiro 28, 2009, 10:02am
#2
Use um Command Link com sua imagem…
<h:commandLink action="#{PesquisaSolicitacaoMB.emitirRelatorioSolicitacao}" target="_blank">
<img src="/imagens/report.png" />
</h:commandLink>
rollei
Janeiro 28, 2009, 10:13am
#3
[quote=Gbzao!]Use um Command Link com sua imagem…
<h:commandLink action="#{PesquisaSolicitacaoMB.emitirRelatorioSolicitacao}" target="_blank">
<img src="/imagens/report.png" />
</h:commandLink>
[/quote]
Tem como fazer isso com o commandButton? Porque tem no projeto alguns botões padrão
rollei
Janeiro 28, 2009, 10:21am
#4
A cargo de teste eu mudei o botão.
<h:commandLink
value="Teste"
target="_blank"
action="#{PesquisaSolicitacaoMB.emitirRelatorioSolicitacao}"
onclick="if (!confirm('Tem certeza que deseja EMITAR RELATÒRIO da solicitação #{solicitacao.pkSeqSolicitacaoSol}?')) return false"
style="float:left"
rendered="#{renderBotaoEmitirRelatSolicitacao}">
<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:commandLink>
ele continua abrindo o relatório na mesma página
Gbzao
Janeiro 28, 2009, 10:36am
#5
Eu uso o JasperRunManager.runReportToPdfStream para enviar o relatório para o browser.
E utilizo um commandLink com target _blank ( nova janela ).
Funciona perfeitamente.
ebarros
Janeiro 28, 2009, 10:37am
#6
[quote=rollei]A cargo de teste eu mudei o botão.
<h:commandLink
value="Teste"
target="_blank"
action="#{PesquisaSolicitacaoMB.emitirRelatorioSolicitacao}"
onclick="if (!confirm('Tem certeza que deseja EMITAR RELATÒRIO da solicitação #{solicitacao.pkSeqSolicitacaoSol}?')) return false"
style="float:left"
rendered="#{renderBotaoEmitirRelatSolicitacao}">
<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:commandLink>
ele continua abrindo o relatório na mesma página[/quote]
Tente fazer redirecionar para outra pagina assim q o relatorio for invocado.
ex:
//apos chamar o print do relatorio insira a seguinte linha de codigo metodo emitirRelatorioSolicitacao()
response.sendRedirect( request.getContextPath() + "/pathDaPaginaQueDesejaRedicionar/suaPagina.jsp" );
Outra dica seria usar o actionListener ao invés do action. Boa Sorte!
kra, tava com um problema parecido…
Coloca o target ="_blank" no teu form que resolve…
rollei
Janeiro 28, 2009, 10:54am
#8
[quote=aspiranteJava]kra, tava com um problema parecido…
Coloca o target ="_blank" no teu form que resolve…[/quote]
Esse Form que eu tenho por exemplo tem 3 commandButtons e todos abrem outra pagina, mas soh esse de imprimir relatorio deveria abrir uma outra página. Como faço para os outros abrirem na mesma página?
rollei
Janeiro 28, 2009, 11:05am
#9
[quote=Gbzao!]Eu uso o JasperRunManager.runReportToPdfStream para enviar o relatório para o browser.
E utilizo um commandLink com target _blank ( nova janela ).
Funciona perfeitamente.[/quote]
estou usando essa função:
byte array[] = JasperRunManager.runReportToPdf(jasperReport, parametros, con);
Estou gerando um stream e mandando para o Browser
ServletOutputStream servletOutputStream = res.getOutputStream();
servletOutputStream.write(stream);
Alguma coisa diferente que você está fazendo? Tem como fazer usando o botao e nao o link?
[]'s
Vc pode utilizar h:commandLink
Aqui eu utilizo assim :
<a4j:form id="formReport" target="_new">
<rich:toolBar height="20" itemSeparator="line" >
<rich:toolBarGroup itemSeparator="line" location="right">
<h:panelGroup>
<div id="menu">
<a jsfc="h:commandLink" name="Gerar Relatório" title="Imprimir"
action="#{clienteReportBean.gerarRelatorio}">
<span>
<img src="imagens/icon/btnImprimir.png" />
<h:outputText value="Imprimir"/>
</span>
</a>
</div>
</h:panelGroup>
<h:panelGroup>
<div id="menu">
<a jsfc="a4j:commandLink" name="Cancelar" reRender="formReport" title="Cancelar"
action="#{clienteReportBean.setarCampos}">
<span>
<img src="imagens/menu/cancelar.png" />
<h:outputText value="Cancelar" />
</span>
</a>
</div>
</h:panelGroup>
Ai acontece que o botão de gerar relatório abre outra página e o cancelar executa a função no bean e apenas renderiza a página.
Então rollei, você conseguiu abrir o relatório em outra página?!
Ressuscitei o tópico pq esse esta exatamente no contexto que gostaria e não acho necessário criar um novo e estamos usando métodos muito semelhantes.
Abraços!
mrbbm
Dezembro 16, 2009, 5:29pm
#12
Se for só um botão ou se sempre quiser abrir em outra janela então basta colocar o target do form para _blank.
E depois na action do botão fazer o retorno do método para string e encaminha-la à pagina desejada pelo faces-config.
Segue uma alternativa, utilizando o onclick
<h:commandButton id="gerarRelatorio" value="Gerar Relatório" action="gerarRelatorio" onclick="this.form.target='_blank'" />
se houver outros botões basta não incluir o onclick
faum
Março 24, 2010, 4:38pm
#14
Estou com o mesmo problema e tenho mais 3 botões na tela. Se usar o _blank todos direcionam para outra pagina.
Tenho 3 botões. Salvar, Excluir, Voltar e Exibir Relatório. Todos tem q ser <h:commandButton> mas só o Exibir Relatório tem q abrir outra pag…
Alguem pode dar uma luz ai, estou com o mesmo problema do colega ai d cima!
Solução: Se voce usou em um dos botões para abrir uma nova aba (ou janela dependendo do browser):
onclick="this.form.target=’_blank’;
Todos os botões do seu form passam a abrir uma nova aba.
Para evitar que isso aconteça nos demais botões que não deseja essa ação use:
onclick="this.form.target=’_self’;
Valeu!
1 curtida
Resolvi esse problema da seguinte forma:
<h:form id="form" target="_blank">
// Formulario do relatório
<p:commandButton id="gerar" value="GERAR" action="#{visualizadorBean.gerarPDf}" ajax="false"/>
</h:form>
No meu caso que preciso somente gerar o relatorio funcionu perfeitamente!!
A solução no onclick=“this.form.target=’_blank’” funcionou perfeitamente! Obrigado.
haaaaaaaaaaa num funciona… to com o mesmo problema seu tenho 3 botoes um pra editar outro pra confirma e outro para abrir o relatorio se eu coloco onclick=“this.form.target=’_self’” não funciona e assim onclick=“this.form.target=’_blank’” todos abrem em uma nova pagina… alguem????????????w
Pessoal obrigado pela ajuda.