Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Integração Ireport Designer

Seria bom disponibilizar no curso um exemplo como esse, pois iria ajudar bastantes a galera.

public class UtilRelatoriosPdf implements Serializable {

/**
 * 
 */
private static final long serialVersionUID = 1L;


@SuppressWarnings({ "rawtypes" })
public static void imprimeRelatorio(String relatorioNome, Map<String, Object> parametros, List lista) {
    try {

        // OBTEM O CONTEXTO ATUAL DO JSF
        FacesContext facesContext = FacesContext.getCurrentInstance();

        ServletContext scontext = (ServletContext) facesContext.getExternalContext().getContext();

        HttpServletResponse res = (HttpServletResponse) facesContext.getExternalContext().getResponse();

        // LOCAL ONDE ESTAO OS RELATORIOS
        String path = scontext.getRealPath("/WEB-INF/relatorios/");
        // SEPARA OS RELATORIOS
        parametros.put("SUBREPORT_DIR", path + File.separator);
        // SETA PARA BRASIL
        parametros.put(JRParameter.REPORT_LOCALE, new Locale("pt", "BR"));
        // O JASPER VAI NO CAMINHO + E PEGA O RELATORIO SEPARADO + O NOME DO MESMO +
        // ESTENSAO NO CASO .JASPER

        JasperPrint jasperPrint = JasperFillManager.fillReport(
                scontext.getRealPath("/WEB-INF/relatorios/") + File.separator + relatorioNome + ".jasper",
                // PASSANDO A CONEXAO DO DATASOURCE CUSTOMIZADO APENAS PARA RELATORIOS
                parametros, getConnection());

        // B = UM ARRAY DE ARQUIVOS E EXPORTA PARA PDF
        byte[] b = JasperExportManager.exportReportToPdf(jasperPrint);

        // RESETA O CONTEXTO
        res.reset();

        // SETA PARA O TIPO PDF NA TELA
        res.setContentType("application/pdf");

        // GERA O ARQUIVO NA TELA SEM FAZER O DOWLOAD
        res.addHeader("Content-disposition", "inline);filename=relatorio" + relatorioNome + ".pdf");

        // ESCREVE
        res.getOutputStream().write(b);

        // FECHA A RESPONSE
        // facesContext.renderResponse();
        // FECHA O CONTEXTO E BOLA PARA FRENTE
        facesContext.responseComplete();

    } catch (Exception e) {
        UtilMensagens.mensagemErro("Erro ao imprimir: " + UtilErros.getMensagemErro(e));
        e.printStackTrace();
    }
}

// CAMINHO DO BANCO
private static final String JAVA_JBOOS_DATASOURCES_SGIDS = "java:jboss/datasources/SGIDS";

private static Connection getConnection() throws UtilException {
    java.sql.Connection conexao = null;

    try {
        Context initContext = new InitialContext();
        DataSource ds = (DataSource) initContext.lookup(JAVA_JBOOS_DATASOURCES_SGIDS);
        conexao = (java.sql.Connection) ds.getConnection();
    } catch (NamingException e) {
        throw new UtilException("Não foi possivel encontrar uma conexão com o banco de dados", e);
    } catch (SQLException e) {
        throw new UtilException("Ocorreu um erro de SQL", e);
    }
    return conexao;
}

}

// depois criaria uma Classe conforme abaixo para chamar o relatório.

// metodo da classe

public void actionRelatorioPdfPorData() {
    Map<String, Object> parametros = new HashMap<String,Object>();
    parametros.put("codCliente", this.codCliente);
    parametros.put("dataInicio", this.dataInicio);
    parametros.put("dataFim", this.dataFim);
    UtilRelatoriosPdf.imprimeRelatorio("RelatorioDeClientes", parametros, clienteDao.listaCliente(cliente));
    init();
}
1 resposta
solução!

Fala Thiago, tudo bem?

Obrigado pelo feedback, vou encaminhar sua sugestão =)

Abraço!