GUJ Discussões   :   últimos tópicos   |   categorias   |   GUJ Respostas

Erro iReport + NetBeans - relatório em branco


#1

Já procurei esse erro aqui no GUJ e tem vários tópicos, porém em nenhum deles consegui resolver meu problema.

1- uso NetBeans com o plug-in do iReport. iReport-3.7.6-plugin
2- no netbeans eu tenho um relatório com apenas um Static Text, só pra teste....
3- no netbeans eu tenho essa classe com o método:

import java.io.IOException;
import java.io.InputStream;
import javax.faces.bean.ManagedBean;
import javax.faces.context.FacesContext;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import net.sf.jasperreports.engine.JasperRunManager;
/**
 *
 * @author Alan
 */
@ManagedBean
public class RelatorioBean {
    public void relatorioUsuario() {
        FacesContext context = FacesContext.getCurrentInstance();
        HttpServletResponse response = (HttpServletResponse) context.getExternalContext().getResponse();
        //pega o arquivo .jasper
        InputStream reportStream = context.getExternalContext().getResourceAsStream("relatorios/usuarios.jasper");
        int a = 0;
        try {
            a = reportStream.read();
        } catch (IOException ex) {
            ex.printStackTrace();
        } finally {
//só pra ve se ta lendo o relatório
            System.out.println("tamanho:" + a);
        }
        //envia a resposta com o MIME Type PDF
        response.setContentType("application/pdf");
        //força a abertura do download no navegador
        response.setHeader("Content-disposition", "attachment;filename=relatorio.pdf");
        try (ServletOutputStream servletOutputStream = response.getOutputStream()) {
            JasperRunManager.runReportToPdfStream(reportStream, servletOutputStream, null);
    //        servletOutputStream.flush();
        } catch (Exception e){
            System.out.println("erro: ");
            System.out.println(e);
        }
        context.responseComplete();
    }
}

4- quando eu chamo esse método ai, aparece o erro:

5- no jsf, xhtml, aparece o download do arquivo, mais ele vem com 0kb
6- em anexo ta uma print das libs do projeto... não foi preciso usar as libs do ireport, acredito que ja veio com o plug-in...

alguem sabe oq to fazendo de errado?
se é meu código, ou problema com lib?




#2

huaehw sempre assim, quando eu vejo que não tem + solução, depois de ontem o dia intero e a noite intera mexendo nisso, resolvi posta aqui agora...
e consegui resolve parcialmente....

ele ta gerando agora um relatorio em branco com 1KB

se alguem souber oq to faezendo de errado posta ai por favor...

segue a modificação no método:

    public void relatorioUsuario() {
        FacesContext context = FacesContext.getCurrentInstance();
        HttpServletResponse response = (HttpServletResponse) context.getExternalContext().getResponse();
        //pega o arquivo .jasper
        InputStream reportStream = context.getExternalContext().getResourceAsStream("relatorios/usuarios.jasper");
        //envia a resposta com o MIME Type PDF
        response.setContentType("application/pdf");
        //força a abertura do download no navegador
        response.setHeader("Content-disposition", "attachment;filename=relatorio.pdf");
        try (ServletOutputStream servletOutputStream = response.getOutputStream()) {
            JasperRunManager.runReportToPdfStream(reportStream, servletOutputStream, null);
    //        servletOutputStream.flush();
        } catch (Exception e){
            System.out.println("erro: ");
            System.out.println(e);
        }
        context.responseComplete();
    }

#3

e ai alguem tem idéia doq seja?

estou com um relatório com apenas um static text, pra teste... e ta saindo em branco o pdf :frowning:

meu método ta assim:

    public void relatorioUsuario() {
        FacesContext context = FacesContext.getCurrentInstance();
        HttpServletResponse response = (HttpServletResponse) 
                context.getExternalContext().getResponse();
        //pega o arquivo .jasper
        InputStream reportStream =
                context.getExternalContext().getResourceAsStream("/relatorios/usuarios.jasper");
        //envia a resposta com o MIME Type PDF
        response.setContentType("application/pdf");
        //força a abertura do download no navegador
        response.setHeader("Content-disposition", "attachment;filename=relatorio.pdf");
        try (ServletOutputStream servletOutputStream = response.getOutputStream()) {
            JasperRunManager.runReportToPdfStream(reportStream, servletOutputStream, null, new JRBeanCollectionDataSource(null, false));
            servletOutputStream.flush();
        } catch (Exception e) {
            System.out.println("erro: ");
            System.out.println(e);
        }
        context.responseComplete();
    }

#4

Seu dataSource está vazio. Muito provavelmente teu relatório está com a propriedade "When No Data" setada para "Blank Page".
O Jasper precisa de um dataSource preenchido; caso contrário, o máximo que você pode fazer é imprimir tudo, exceto o detail.
Abraço!


#5

cara deu certo :smiley:
vc eh um gênio hauauha
vlw :smiley:

agora ta pelo menos vindo como "null", tpow só falta passa os parâmetros :smiley:

agora eh tetinha :smiley:

vlw em :smiley:

antigamente tava vindo a página toda em branco.. sem nada.... nem os risco que coloquei pra testa hauhaha


#6

aheuieahiuehauiae
Deu pra rir com a tua resposta aqui! haha
Valeu, cara, boa sorte ae! Qualquer coisa, só postar.
Abraço!


#7

hauwehu vlw mesmo, agora ta aparecendo pelo menos o titulo
+ os campos estão vindo "null"

uma pergunta, eu tenho q passa uma conexão pro relatorio?

pq assim, quando eu clico em "preview" no relatório, aparece os dados certim...
... porém quando eu chamo ele no meu xhtml, ele vem como "null" os dados...
eu tenho q passar uma conexão?

pq na verdade, eu não vo precisa passa parâmetro algum....

basicamente esse "relatório", na verdade, só vai pega uma tabela (entidade) e faze um select * from tabela


#8

pelo q eu pesquisei na internet ta faltando eu passa a conexão do banco.... seria isso mesmo??

o ruim é que eu só to axando pra desktop (swing) e ta meio estranho... e com dao.... to usando hibernate, será que tem um jeito mais fácil do que passar a string do banco, login, senha e talz, td denovo?

ahh pelo q vi eh aki
eu tenho q passa uma connection

JasperRunManager.runReportToPdfStream(reportStream, servletOutputStream, null, con);

eu só nao sei como fazer essa linha:
usando o método correto do hibernate

Connection con = (Connection) new Persistencia().getEntityManagerFactory();


#9

alandiniz já vi que você é iniciante no jasperReport, dá uma olhada nesse tutorial aqui, ele é muito bom também trabalha com o plugin do Ireport no Netbeans e explica passo a passo como criar os relatórios. Ele foi de grande ajuda quando iniciei na criação de relatórios.

http://davidbuzatto.com.br/2010/10/09/jasperreports-trabalhando-com-relatorios-em-java-parte-1/


#10

vlw amigo...

consegui fazer funcionar... passei a Connection e funciono :smiley:

  • tenho certeza q to fazendo POG.. rsrs

#11

Alan, o negócio é que tua query está fixa dentro do layout; então ele vai mesmo precisar de uma conexão pra poder funcionar.
Se tu tá usando hibernate, uma boa opção é fazer a busca com ele e usar um JRBeanCollectionDataSource. E não tem nada de POG nisso, fica frio! hehe
Abraço!


#12

eh intão, eu achei que os dados da configuração ficava no relatório.... mais nao fica nao rsrs...
ai eu passei a conexão deu certo...

  • agora ta filé, ja da pra apresenta o TCC com um "relatório" q faz "select * from entidade"

#13

[quote=leoramos]Seu dataSource está vazio. Muito provavelmente teu relatório está com a propriedade “When No Data” setada para “Blank Page”.
O Jasper precisa de um dataSource preenchido; caso contrário, o máximo que você pode fazer é imprimir tudo, exceto o detail.
Abraço![/quote]

Fala leoramos,

poderia me dizer onde eu configuro essa propriedade?


#14

O que devo fazer para priencher o dataSoucer