JSF + exibir relatório

5 respostas
aspiranteJava

Aeh galera andei pesquisando mas não encontrei nada que atendesse minha duvida. Então la vai:

Tenho umas telas p/ geração de relatórios.
Consigo gerar o relatório blza! Abre em outra aba e talz…

O meu problema é quando os parametros passados geram um relatório VAZIO.
No meu método gerarRelatorio() faço o teste p/ verificar se vai gerar vazio, então disparo uma mensagem na tela do formulario.
Ai ele abre outra aba com a mesma tela e exibindo a mensagem, ou seja DUPLICA meu formulario.
Alguem tem alguma dica p/ evitar isso?
Gostaria apenas que renderizasse o formulario com a mensagem de erro. (nesse caso)
Desde ja agradeço aeh a atenção…

5 Respostas

P

Em algum lugar vc controla a exibição da outra tela? Caso sim, basta vc setar o rendered dela pra false :slight_smile:

aspiranteJava

Kra, gostaria apenas que se o relatório fosse vazio, renderizasse o formulario e exibisse a mensagem, ao invéz de abrir outra aba com o formulario duplicado e com a mensagem exibida.
Devo abrir outra aba somente quando o relatório for gerado. (O que ja consigo fazer…)

P

Se vc colar seu código, é mais fácil de ajudar…

E pra vc controlar a exibição dos seus componentes, utiliza a tag rendered com atributos true/false ( boolean )

aspiranteJava

ok!

Tela:

<a4j:form id=“formReport” target="_new">
<rich:toolBar height=“20” itemSeparator=“line” >
<rich:toolBarGroup itemSeparator=“line” location=“right”>
<h:panelGroup>


<h:commandButton name=“Gerar Relatório” value=“Imprimir”
action="#{trocoPremiadoReport.gerarRelatorio}"
image="/imagens/icon/btnImprimir.gif" />

Método no Manange Bean:

public void gerarRelatorio() {

super.getContexto();

Map parametros = new HashMap();

try {

Connection con = connectionSpringJdbc.getConnection();

parametros.put(ORDEM, this.ordem);



selecionarRelatorio();

InputStream reporte = new FileInputStream(reportFile);

super.bytes = JasperRunManager.runReportToPdf(reporte, parametros, con);

if (bytes != null && bytes.length > 785) {

super.validacoes();

String relPath = /WEB-INF/reports/ + super.getNomeRelatorio();

String realpath = scontext.getRealPath(relPath);

File f = new File(realpath);

FileOutputStream out = new FileOutputStream(f);

out.write(bytes);

out.flush();

out.close();

this.url = scontext.getContextPath() + relPath;

} else {

getUrl();

FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(

BeanMessages.getMsgProperty(bean.reports.ClienteReportBean.relatorioVazio)));

}

} catch (JRException e) {

e.printStackTrace();

} catch (Exception e) {

e.printStackTrace();

}

}

Ja tentei chamar um JavaScript no onclick do botão p/ abrir a nova aba com a URL (passo por parametro) do relátorio, mas a propriedade URL so é populada no fim da execução do meu metodo gerarRelatorio(), ai não rola ne…

mateusprado

padcoe:
Se vc colar seu código, é mais fácil de ajudar…

E pra vc controlar a exibição dos seus componentes, utiliza a tag rendered com atributos true/false ( boolean )

…mais facil ainda se colocar entre as tags code.
Voce pode fazer o controle com o rendered de seus componente. Passando true ou false na chamada de seus bean por exemplo.

Criado 22 de janeiro de 2009
Ultima resposta 22 de jan. de 2009
Respostas 5
Participantes 3