JasperReports no JSF

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

[code]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);[/code]

É 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:

Opa,

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

[code] // 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[/code]

:okok:

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!

Se vc da submit em um form é só fazer

<form blabla target="_blank">

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();
}
}
}