JasperReports no JSF

4 respostas
F

Estou conseguindo gerar um relatório no JSF usando o código abaixo:

bd.open();
bd.psmt = bd.conn.prepareStatement("SELECT Tipos.Tipo, Modelos.Modelo " +
    "FROM Tipos, Modelos " +
    "WHERE Tipos.TipoID = Modelos.TipoID " +
    "GROUP BY Tipos.Tipo, Modelos.Modelo " +
    "ORDER BY Tipos.Tipo");
bd.rs = bd.psmt.executeQuery();

// implementação da interface JRDataSource para DataSource ResultSet
JRResultSetDataSource jrRS = new JRResultSetDataSource(bd.rs);

// HashMap de parametros utilizados no relatório. Sempre instanciados
Map parameters = new HashMap();

// Preenche o relatório com os dados. Gera o arquivo ListaTiposModelos.jrprint
JasperFillManager.fillReportToFile(pathRelatorios + "/ListaTiposModelos.jasper", parameters, jrRS);

// Exporta para o formato PDF
//JasperExportManager.exportReportToPdfFile(pathRelatorios + "/ListaTiposModelos.jrprint");

// Visualiza o relatório em formato PDF
JasperViewer.viewReport(pathRelatorios + "/ListaTiposModelos.jrprint", false);

É aberto uma janela do próprio java (não janela do navegador e nem acrobat reader) mostrando o resultado, porém quando fecho essa janela o tomcat para, tenho que startar o tomcat a cada ver que fecho a janela do relatório, gostaria de saber como posso abrir o relatório direto no acrobat reader dentro no navegador... obrigado!

[size="11"][color="red"]* Editado: Lembre-se de utilizar BBCode em seus códigos - marcossousa[/color][/size] :joia:

4 Respostas

M

Opa,

você tem que setar o tipo da resposta... mais ou menos assim:

// response você pega do FacesContext
byte[] buffer = JasperRunManager.runReportToPdf(
	reportFilename,
	parameters,
	getConnection()
);
				
response.setContentType("application/pdf");
response.setContentLength(buffer.length);
ServletOutputStream ouputStream = response.getOutputStream();
ouputStream.write(buffer, 0, buffer.length);
ouputStream.flush();
ouputStream.close();
facesContext.reponseComplete(); // pula fase de rederização

:okok:

F

Ae Marcos, isso mesmo funcionou, não querendo abusar talvez até seja uma pergunta boba, mas como posso abrir esse relatório em uma nova pagina?

Obrigado!

O

Se vc da submit em um form é só fazer

<form blabla target="_blank">
J

Galera, também estou tentando gerar um relatório mas com um main…o que seria nesse código no JasperFillManager o comando (pathRelatorio + ") é um caminho para o arquivo?? dêem uma olhada no meu código pra ver no que podem me ajudar:

Na saída dá o seguinte erro:

Conectando ao banco

net.sf.jasperreports.engine.JRException: java.io.FileNotFoundException: \relatorio\report.jasper

at net.sf.jasperreports.engine.util.JRLoader.loadObject(JRLoader.java:84)

at net.sf.jasperreports.engine.JasperFillManager.fillReportToFile(JasperFillManager.java:458)

at Model.Relatorio1.gerar(Relatorio1.java:47)

at Model.Relatorio1.main(Relatorio1.java:77)

Caused by: java.io.FileNotFoundException: \relatorio\report.jasper

 4 more

CONSTRUÍDO COM SUCESSO (tempo total: 2 segundos)

package Model;

import java.util.HashMap;

import java.sql.*;

import net.sf.jasperreports.engine.JRException;

import net.sf.jasperreports.engine.util.JRLoader;

import net.sf.jasperreports.engine.JRResultSetDataSource;

import net.sf.jasperreports.engine.JasperCompileManager;

import net.sf.jasperreports.engine.JasperReport;

import net.sf.jasperreports.engine.JasperFillManager;

import net.sf.jasperreports.engine.JasperPrint;

import net.sf.jasperreports.engine.JasperExportManager;

import net.sf.jasperreports.view.JasperViewer;

import java.util.logging.Level;

import java.util.logging.Logger;

/**
*

  • @author Jeferson
    */
    public class Relatorio1 {

    Relatorio1 r;

    public Relatorio1(){

    }

    public void gerar() throws JRException , SQLException, ClassNotFoundException{

    Connection con = (Connection) new FabricaConexao().conectar();
    
     String query = "select * from produto";
     Statement stm = con.createStatement();
     ResultSet rs = stm.executeQuery(query);
    
     JRResultSetDataSource jrRS = new JRResultSetDataSource(rs);
    
     HashMap p = new HashMap();
    
     JasperFillManager.fillReportToFile("/relatorio/report.jasper", p, jrRS);
    
     JasperExportManager.exportReportToPdfFile("/relatorio/report.jrprint");
    
     JasperViewer.viewReport("/relatorio/report.jrprint", false);
    

    }// <editor-fold defaultstate=“collapsed” desc=“comment”>
    // </editor-fold>

public class FabricaConexao {

public Connection conectar(){
    System.out.println("Conectando ao banco");
try {
        try {
            Class.forName("com.mysql.jdbc.Driver");
        } catch (ClassNotFoundException ex) {
            Logger.getLogger(FabricaConexao.class.getName()).log(Level.SEVERE, null, ex);
        }
        return DriverManager.getConnection("jdbc:mysql://localhost:3306/farmatads","root","52872");
} catch(SQLException e) {
throw new RuntimeException(e);
}
}//connection conectar

}//fabrica conexao

public static void main (String args[]){

try {

Relatorio1 r = new Relatorio1();

r.gerar();

} catch (Exception e) {

e.printStackTrace();

}

}

}
Criado 28 de junho de 2006
Ultima resposta 4 de jul. de 2010
Respostas 4
Participantes 4