[Resolvido!] Problemas para chamar subreport no método imprimirRelatorio

5 respostas
Kleber-rr

Olá pessoal, boa tarde.

Estou precisando de uma ajuda na hora de imprimir um relatorio em PDF com 3 subreports.

O método funciona perfeitamente sem os subreports.
Já testei no iReport com os subreports e funciona perfeitamente. O problema é apenas na hora de passar os parâmetros no método.

segue o código:
private String getDiretorioReal(String diretorio) {
        HttpSession session = (HttpSession) FacesContext.getCurrentInstance()
                .getExternalContext().getSession(false);
        System.out.println("getDireitorioReal");
        return session.getServletContext().getRealPath(diretorio);
    }

    private void preenchePdf(JasperPrint print) throws JRException {
        saida = getDiretorioReal("/pdf/relatorio.pdf");
        JasperExportManager.exportReportToPdfFile(print, saida);
        saida = getContextPath() + "/pdf/relatorio.pdf";
    }

    private String getContextPath() {
        HttpSession session = (HttpSession) FacesContext.getCurrentInstance()
                .getExternalContext().getSession(false);
        System.out.println("getContextPath");
        return session.getServletContext().getContextPath();
    }

    public String imprimirRelatorio(ActionEvent event) throws Exception {

        UIComponent link = event.getComponent();
        UIParameter parametro = (UIParameter) link.findComponent("printCod");
        Long id = (Long) parametro.getValue();
        saida = null;
        String jasper = getDiretorioReal("/jasper/pessoafisicaDC.jasper");
        Connection conexao = null;

        FacesContext facesContext = FacesContext.getCurrentInstance();
        HttpServletResponse response = (HttpServletResponse) facesContext
                .getExternalContext().getResponse();
        ServletOutputStream servletOutputStream = response.getOutputStream();

        try {
            Connection con = new Conexao().getConexao();
            Statement stm = con.createStatement();
            String query = "SELECT escolaridade.descricao AS escolaridade_descricao, cargahorariasemanal.descricao AS cargahorariasemanal_descricao, cargo.descricao AS cargo_descricao, estados.uf AS estados_uf, municipiosrr.municipios AS municipiosrr_municipios, * FROM funcionario, municipiosrr, estados, cargo, escolaridade, cargahorariasemanal where cod_funcionario=" + id;
            ResultSet rs = stm.executeQuery(query);
            JRResultSetDataSource jrRS = new JRResultSetDataSource(rs);


            Map map = new HashMap();
            map.put("QUERY", con);
            // PARAMETRO ADICIONADO PARA SUBREPORT
            // map.put("SUBREPORT_DIR", con);

            JasperPrint rel = JasperFillManager.fillReport(jasper, map, jrRS);

            ByteArrayOutputStream output = new ByteArrayOutputStream();
            JasperExportManager.exportReportToPdfStream(rel, output);
            response.setContentType("application/pdf");
            response.addHeader("Content-Disposition",
                    "attachment;filename=relatorio" + id + ".pdf");
            response.setContentLength(output.size());

            servletOutputStream.write(output.toByteArray(), 0, output.size());
            servletOutputStream.flush();
            servletOutputStream.close();
            facesContext.responseComplete();

        } catch (JRException e) {
            e.printStackTrace();

        } finally {
            try {
                if (conexao != null)
                    conexao.close();
            } catch (Exception e) {

            }
        }

        return "exibeRelatorio";

    }

Agradeço a ajuda.

5 Respostas

Kleber-rr
Pessoal, dando uma pesquisada ontem, vi que eu tinha que criar os subreports no iReport usando o parametro no lugar do caminho do subreport. Fiz algumas alterações e passei no parâmetro do HashMap, ficando assim:
Map parametros = new HashMap();
            parametros.put("QUERY", con);

            // PARAMETRO ADICIONADO PARA SUBREPORT
            parametros.put("pathPessoafisicaDCsubOG", jasper
                    + "/pessoafisicaDCsubOG.jasper");
            parametros.put("pathPessoafisicaDCsubUN", jasper
                    + "/pessoafisicaDCsubUN.jasper");
            parametros.put("pathPessoafisicaDCsubCS", jasper
                    + "/pessoafisicaDCsubCS.jasper");

Mesmo assim, ainda me aparece o subrelatorio em branco...

Se alguém puder ajudar, agradeço.

Flws

Kleber-rr

Eae pessoal, kd a solidariedade do pessoal do fórum???

HELP HERE!!!
:stuck_out_tongue:

Kleber-rr

Pessoal, era coisa simples: como eu estava realizando a consulta através de uma conexão, era só passar a conexão pelo parâmetro.

Map parametros = new HashMap();
			parametros.put("REPORT_CONNECTION", con);

			// PARAMETRO ADICIONADO PARA SUBREPORT

			parametros.put("pathPessoafisicaDCsubOG",
					getDiretorioReal("/jasper/") + File.separator
							+ "pessoafisicaDCsubOG.jasper");
			parametros.put("pathPessoafisicaDCsubUN",
					getDiretorioReal("/jasper/") + File.separator
							+ "pessoafisicaDCsubUN.jasper");
			parametros.put("pathPessoafisicaDCsubCS",
					getDiretorioReal("/jasper/") + File.separator
							+ "pessoafisicaDCsubCS.jasper");

Crédito para nosso amigo Pablo Nóbrega, que graças a sua boa vontade, me ajudou nessa luta.

Valeu brow.
Deus te abençoe.

N

Kleber-rr você foi minha salvação depois de 3dias perdidos com esse problema você me ajudou falando que devia ser enviado a conexao, heheheh

abraçoo e tamo ai caso precisar

Kleber-rr

Blz. Se precisar, estamos ae!!
Abs.

nnettu:
Kleber-rr você foi minha salvação depois de 3dias perdidos com esse problema você me ajudou falando que devia ser enviado a conexao, heheheh

abraçoo e tamo ai caso precisar

Criado 10 de novembro de 2010
Ultima resposta 25 de jan. de 2011
Respostas 5
Participantes 2