Erro iReport + NetBeans - relatório em branco

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:

[quote]tamanho:172
erro:
net.sf.jasperreports.engine.JRException: Error loading object from InputStream[/quote]

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?


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:

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

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:

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

[/code]

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!

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

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

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

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

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.

vlw amigo…

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

  • tenho certeza q to fazendo POG… rsrs

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!

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”

[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?

O que devo fazer para priencher o dataSoucer