1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

Problemas para gerar Relatório

Estou tentando gerar relatórios com filtros: data atual, data final e reservatório(objeto). Ao clicar no botão para gerar o relatório nada acontece e nenhuma exceção aparece no console. Seguem os códigos: xhtml:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:p="http://primefaces.org/ui"
    xmlns:namespace="http://java.sun.com/jsf/composite/namespace"
    xmlns:sec="http://www.springframework.org/security/facelets/tags">
<!-- 
        Replace path to template, title, header and body
        with actual data.
     -->
<ui:composition template="Template.xhtml">
    <ui:define name="content">
        <div class="content_wrapper">
            <div class="content">
                <sec:ifAnyGranted roles="ROLE_ADMINISTRADOR,ROLE_USUARIO,ROLE_GERENCIADOR">




                    <h:form id="formGrid">
                    Data Inicial: <p:calendar id="popup" value="#{relatorioHistoricoMB.dataInicial}" />
                    Data Final: <p:calendar id="popup2" value="#{relatorioHistoricoMB.dataFinal}" />
                    <p:selectOneMenu value="#{relatorioHistoricoMB.reservatorio.idReservatorio}"
                        style="width:170px" required="true"
                        requiredMessage="Selecione algum.">
                        <f:selectItem itemLabel="Selecione o Reservatório" itemValue="0" />
                        <f:selectItems value="#{relatorioHistoricoMB.listaReservatorio}"
                            var="reservatorio" itemLabel="#{reservatorio.nomeReservatorio}"
                            itemValue="#{reservatorio.idReservatorio}" />
                    </p:selectOneMenu>
                    <p:commandButton value="Gerar relatório" update="formGrid"
                        actionListener="#{relatorioHistoricoMB.executar}" />

                        <p:dataTable id="Grid" var="historico"
                            value="#{HistoricoBean.listaHistorico}"
                            selection="#{HistoricoBean.historico}" selectionMode="single"
                            rowKey="#{historico.idHistorico}" paginator="true" rows="5">
                            <f:facet name="header">
                                <h:outputText value="Historico" />
                            </f:facet>
                            <p:column headerText="Reservatorio">
                                <f:facet name="header">
                                    <h:outputText value="Reservatorio" />
                                </f:facet>
                                <h:outputText value="#{historico.reservatorio.nomeReservatorio}" />
                            </p:column>


                            <p:column headerText="Bomba">
                                <f:facet name="header">
                                    <h:outputText value="Bomba" />
                                </f:facet>
                                <h:outputText value="#{historico.bomba.nomeBomba}" />

                            </p:column>

                            <p:column headerText="Data">
                                <f:facet name="header">
                                    <h:outputText value="Data" />
                                </f:facet>
                                <h:outputText value="#{historico.dataHistorico}" />
                            </p:column>

                            <p:column headerText="Evento">
                                <f:facet name="header">
                                    <h:outputText value="Evento" />
                                </f:facet>
                                <h:outputText value="#{historico.novoStatusHistorico}" />
                            </p:column>


                        </p:dataTable>
                    </h:form>
                </sec:ifAnyGranted>
            </div>
        </div>
    </ui:define>
</ui:composition>
</html>

conteudo do relatório:

    public void executar() throws Exception {
        List<Historico> ListaHistorico = new ArrayList<Historico>();

        HistoricoCrudAnnotations HistoricoDAO = new HistoricoCrudAnnotations();
        ListaHistorico = HistoricoDAO.listar();
        int x = ListaHistorico.size();
        Historico2[] ListaHistorico2 = new Historico2[x];
        List<Historico2> Historico = new ArrayList<Historico2>();
        GregorianCalendar dataCal = new GregorianCalendar();
        dataCal.setTime(dataInicial);
        int mesInicial = dataCal.get(Calendar.MONTH);
        dataCal.setTime(dataFinal);
        int mesFinal = dataCal.get(Calendar.MONTH);
        System.out.println("MÉTODO EXECUTAR");
        for (int i = 0; i < ListaHistorico.size(); i++) {
            String mesBanco = historicoDAO.listar().get(i).getDataHistorico()
                    .substring(3, 5);
            int mesBancoi = Integer.parseInt(mesBanco);
            if ((mesBancoi >= mesInicial)
                    && (mesBancoi <= mesFinal)
                    && (reservatorio.getIdReservatorio() == ListaHistorico
                            .get(i).getReservatorio().getIdReservatorio()))

            {
                ListaHistorico2[i] = new Historico2();
                ListaHistorico2[i].setIdHistorico(ListaHistorico.get(i)
                        .getIdHistorico());
                ListaHistorico2[i].setNomeBomba(ListaHistorico.get(i)
                        .getBomba().getNomeBomba());
                ListaHistorico2[i].setNomeReservatorio(ListaHistorico.get(i)
                        .getReservatorio().getNomeReservatorio());
                ListaHistorico2[i].setNovoStatusHistorico(ListaHistorico.get(i)
                        .getNovoStatusHistorico());
                ListaHistorico2[i].setDataHistorico(ListaHistorico.get(i)
                        .getDataHistorico());
                ListaHistorico2[i].setObsReservatorio(ListaHistorico.get(i)
                        .getReservatorio().getObsReservatorio());
                Historico.add(ListaHistorico2[i]);
            }
        }
        JRBeanCollectionDataSource beanCollectionDataSource = new JRBeanCollectionDataSource(
                Historico, false);
        Map<String, Object> parameterMap = new HashMap<String, Object>();
        Image logo = new ImageIcon(getClass().getResource("Logo.png"))
                .getImage();
        parameterMap.put("logo", logo);
        ReportUtil.executarRelatorio("/WEB-INF/jasper/Rhistorico2.jasper",
                parameterMap, "RelatorioHistorico", beanCollectionDataSource);
    }

Gerar relatório:

 public static void executarRelatorio(String caminhoRelatorio, Map<String, Object> parametros, String nomeRel, JRBeanCollectionDataSource fonteDados) throws Exception{

            FacesContext context = FacesContext.getCurrentInstance();
            HttpServletResponse response = (HttpServletResponse) context.getExternalContext().getResponse();

            //pega o caminho do arquivo .jasper da aplicação
            InputStream reportStream = (InputStream) context.getExternalContext().getResourceAsStream(caminhoRelatorio);


            response.setHeader("Content-Disposition", "attachment; filename="+ nomeRel +".pdf");
            response.setContentType("application/download");
            response.setHeader("Pragma", "no-cache");
            try {
                System.out.println("------Inicio Try!-------");     
                ServletOutputStream servletOutputStream = response.getOutputStream();


                //envia parametros para o relatório
                if (parametros == null){
                    parametros = new HashMap<String, Object>();
                }

                //envia para o navegador o PDF gerado
                JasperRunManager.runReportToPdfStream(reportStream, servletOutputStream, parametros, fonteDados);
                servletOutputStream.flush();
                servletOutputStream.close();

                System.out.println("-----Passou Flush e Close!-----");

            } catch (JRException e) {
                e.printStackTrace();
                try {
                    throw new Exception(ERRO_MENSAGEM_REPORT);
                } catch (Exception e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
            } catch (IOException e) {
                e.printStackTrace();
                try {
                    throw new Exception(ERRO_MENSAGEM_REPORT);
                } catch (Exception e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
            }finally{
                context.responseComplete();
            }
        }

        //executa o relatório através de uma Conexao
        public static void executarRelatorioConexao(String caminhoRelatorio, Map<String, Object> parametros, String nomeRel, java.sql.Connection connection) throws Exception{

            FacesContext context = FacesContext.getCurrentInstance();
            HttpServletResponse response = (HttpServletResponse) context.getExternalContext().getResponse();

            //pega o caminho do arquivo .jasper da aplicação
            InputStream reportStream = (InputStream) context.getExternalContext().getResourceAsStream(caminhoRelatorio);


            response.setHeader("Content-Disposition", "attachment; filename="+ nomeRel +".pdf");
            response.setContentType("application/download");
            response.setHeader("Pragma", "no-cache");
            try {
                System.out.println("------Inicio Try!-------");
                ServletOutputStream servletOutputStream = response.getOutputStream();


                //envia parametros para o relatório
                if (parametros == null){
                    parametros = new HashMap<String, Object>();
                }

                //envia para o navegador o PDF gerado
                JasperRunManager.runReportToPdf(caminhoRelatorio, parametros, connection);
                servletOutputStream.flush();
                servletOutputStream.close();

                System.out.println("-----Passou Flush e Close!-----");

            } catch (JRException e) {
                e.printStackTrace();
                try {
                    throw new Exception(ERRO_MENSAGEM_REPORT);
                } catch (Exception e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
            } catch (IOException e) {
                e.printStackTrace();
                try {
                    throw new Exception(ERRO_MENSAGEM_REPORT);
                } catch (Exception e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
            }finally{
                context.responseComplete();
            }
        }

}
  • Pelo que percebi existem dois metodos que geram relatório, minha pergunta é:

    um método não está funcionando ou são os dois que não estão? em um dos métodos está: runReportToPdf e o outro com o método runReportToPdfStream. Acho que se você definir o runReportToPdf ele irá funcionar.

    José Lucas Moraes   25 de out de 2015
  • Eu estou seguindo o exemplo de outros relatórios que já estão sendo gerados, a unica diferença é que não existem filtros nos outros.

    Newsted   25 de out de 2015
  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

1 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags ireport ou faça a sua própria pergunta.