Problemas ao exibir relatórios IReport

6 respostas
Diego_Adriano

Bem, estou com dois problemas, seguinte.
Preciso executar uma ação ao acionar um botão e imprimir um relatório do IReport, bem, a ação acontece, o relatório é gerado ate ai legal, só que, se eu chamo o relatório na new page as informações não são limpas na view e nem a msg de sucesso é exibida … Então tentei jogar um confirmDialog para só chamar o relatório se o Usuário quiser, porém o confirmeDialog exibe e já some …

<p:commandButton value="Baixar"  icon="ui-icon-disk" actionListener="#{vencidosBean.baixaTitulo}"
ajax="false" update="confirmDialog" onclick="confirmation.show()"/>

<p:confirmDialog id="confirmDialog" message="Gostaria de Imprimir o Recibo ?"  
                severity="alert" widgetVar="confirmation">  
			                  
        <p:commandButton id="confirm" value="Sim, claro" update="formTitulo" oncomplete="confirmation.hide()"  
                    actionListener="#{vencidoBean.imprimeRecibo}" />  

        <p:commandButton id="decline" value="Não, Obrigado" onclick="confirmation.hide()" type="button" 
       		actionListener="#{vencidoBean.naoImprimeRecibo}"/>   
			                  
</p:confirmDialog>

6 Respostas

C

Se fizer assim?

<p:commandButton id="confirm" value="Sim, claro" update="formTitulo" onclick="confirmation.hide()" ajax="false" actionListener="#{vencidoBean.imprimeRecibo}" />

V

poderia mostrar o codigo pra visualizar o relatório na tela ?

Diego_Adriano

Bem, acho que o erro não é no código, mas ai vai ..
Repare que dividi em Tres métodos, pois estava tentando usar o confirmDialog, mas a rotina ficava toda dentro de baixarTitulo

/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
//						BAIXA TÍTULO
/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
public void baixaTitulo() throws ClassNotFoundException, SQLException{
		
	ContasaReceberRepository crr = new ContasaReceberRepository(getEntityManager());
	getTitulo().setSituacao("P");
		
	//crr.baixaTitulo(getTituloSelecionado());
		
}
public void imprimeRecibo(ActionEvent event){
		
	ImpremeReciboPagamento irp = new ImpremeReciboPagamento();
	System.out.println("ANTES");
	try {
		irp.imprimeRecido(titulo.getId());

	} catch (ClassNotFoundException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	} catch (SQLException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
	System.out.println("DEPOIS");
		
	FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(
		FacesMessage.SEVERITY_WARN,""+getUsuarioSessao().getNome()+
			" - TÍTULO BAIXADO COM SUCESSO",""));
		titulo = new ContasaReceber();
	   titulos = new ArrayList<ContasaReceber>();
	valorTotal = new Double(0.00);
	System.out.println("GERAR");
			gerar();
	System.out.println("GEROU");
		
}

public void naoImprimeRecibo(ActionEvent event){
	
	FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(
			FacesMessage.SEVERITY_WARN,""+getUsuarioSessao().getNome()+
				" - TÍTULO BAIXADO COM SUCESSO",""));
	
		titulo = new ContasaReceber();
	   titulos = new ArrayList<ContasaReceber>();
	valorTotal = new Double(0.00);
	System.out.println("GERAR");
			gerar();
	System.out.println("GEROU");
	
}
V
irp.imprimeRecido(titulo.getId());

poderia postar esse metodo ?

Diego_Adriano

Ele gera o relatório …
Bem ele funciona normalmente … a nova página é gerada normalmente, porém a view onde é feita a requisição não acontece ação nenhuma … assim como quando tento usar o Dialog e ele não exibe o mesmo … Exibe muito rápido e some.
Mas vou postar o método

Diego_Adriano
@SuppressWarnings({ "rawtypes", "unchecked","static-access" })
	public void imprimeRecido(Long codPgto) throws ClassNotFoundException, SQLException{
		
		Conexao conexao = new Conexao();
		Connection conn = conexao.getConnection();
		Statement stm = conn.createStatement();
		
		String sql = "SELECT "+
					     "cliente.`nome` AS cliente_nome, "+
					     "cliente.`sobrenome` AS cliente_sobrenome, "+
					     "contasareceber.`dataPagamento` AS contasareceber_dataPagamento, "+
					     "contasareceber.`valor` AS contasareceber_valor, "+
					     "contasareceber.`dataVencimento` AS contasareceber_dataVencimento, "+
					     "vigencia.`finalVigencia` AS vigencia_finalVigencia "+
					"FROM "+
					     "`cliente` cliente INNER JOIN `venda` venda ON cliente.`id` = venda.`cliente` "+
					     "INNER JOIN `contasareceber` contasareceber ON venda.`id` = contasareceber.`venda` "+
					     "INNER JOIN `detalhevenda` detalhevenda ON venda.`id` = detalhevenda.`venda` "+
					     "INNER JOIN `vigencia` vigencia ON venda.`id` = vigencia.`venda` "+
					     "AND cliente.`id` = vigencia.`cliente` "+
					     "INNER JOIN `venda` venda_B ON cliente.`id` = venda_B.`cliente` "+
					     "INNER JOIN `venda` venda_A ON cliente.`id` = venda_A.`cliente` "+
					     "AND venda_A.`id` = contasareceber.`venda` "+
					     "AND venda_B.`id` = contasareceber.`venda` "+
					     "AND detalhevenda.`venda` = venda_B.`id` "+
					"WHERE "+
					     "contasareceber.id = '"+ codPgto +"'";
		
		ResultSet rs = stm.executeQuery(sql);
		
		FacesContext context = FacesContext.getCurrentInstance();
		HttpServletResponse response = (HttpServletResponse) context.getExternalContext().getResponse();
		
		InputStream inputStream = context.getExternalContext().getResourceAsStream("/Relatorios_Jasper/ReciboPagamento.jasper");
		
		Map parametro = new HashMap();
		
		parametro.put("idPgto", codPgto);
		
		
		try {
			ServletOutputStream servletOutputStream = response.getOutputStream();
			JRResultSetDataSource jrRS = new JRResultSetDataSource(rs);
			
			JasperRunManager.runReportToPdfStream(inputStream,servletOutputStream,parametro,jrRS);
			
			servletOutputStream.flush();
			servletOutputStream.close();
		
		} catch (JRException e) {
			e.printStackTrace();
		
		}catch (IOException e) {
			e.printStackTrace();
		
		}finally{
			context.responseComplete();
		}
	}
Criado 7 de dezembro de 2012
Ultima resposta 7 de dez. de 2012
Respostas 6
Participantes 3