Muito já li e pesquisei, aqui mesmo no GUJ e em outros sites e não consegui solucionar o meu problema.
Tenho um projeto WEB - JSP + JSF - criado com o NetBeans 6.7.1 e construí um relatório bem simples com o IReport 3.6.0 e preciso chamar esse relatório no sistema que estou desenvolvendo. O relatório está pronto e já foi gerado o arquivo .jasper . Estou utilizando o postgresql.
Estou aprendendo sobre essas tecnologias, já que nunca programei nada para web.
Gostaria que alguém me ajudasse nessa tarefa: Como faço para chamar esse relatório em PDF no browser, passando um ResultSet?
Muito obrigado a todos que puderem me ajudar…
Abraços!
cara a moçada aqui não ajuda muito com relação a geração de relatórios jasper + java. fiquei um tempo pedindo ajuda mas não deu em nada ai tive q estudar a tecnologia mais a fundo.
seguinte essa nova versão do ireport ta meia bugada então sugiro voltar uma versão dessa ferramenta
segue o código q tenho aqui funcionando:
importjava.io.IOException;importjava.io.StringReader;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.ResultSet;importjava.sql.Statement;importjava.util.HashMap;importnet.sf.jasperreports.engine.JasperManager;importnet.sf.jasperreports.engine.JasperPrint;importnet.sf.jasperreports.engine.JasperReport;importnet.sf.jasperreports.engine.design.JasperDesign;importnet.sf.jasperreports.view.JasperViewer;/* Primeira parte */publicclassRelatorioLaboratorio{privateConnectioncon=null;privateStringdriver="oracle.jdbc.driver.OracleDriver";privateStringendereco="jdbc:oracle:thin:@host:1521:sid";privateStringuser="user";privateStringpass="passw";privateResultSetrs=null;privateStringvalores[]=newString[10];privateintchamada=1;privateStringdir=System.getProperty("user.dir")+"/web/";privateStringReaderstream;/*Segunda parte */publicRelatorioLaboratorio(){/* Efetua a conexao a base de dados e coleta os valores da base de dados armazenando-os em um array para ser futuramente utilizado */try{if(con==null){Class.forName(driver);con=DriverManager.getConnection(endereco,user,pass);Statementstatement=con.createStatement();rs=statement.executeQuery("select * from chamado");HashMapteste=newHashMap();while(rs.next()){//for até o numero de campos da tabelafor(inti=1;i<10;i++){valores[i]=rs.getString(i);}}}}catch(Exceptione){System.err.println("Problemas apresentados na operacao de conexao");e.printStackTrace();}/* Inicio do bloco que ira gerar nossos relatorios e 3ª parte */try{//String array[] = valores;JasperDesigndesign=JasperManager.loadXmlDesign(dir+"relatorios/relatorio.jrxml");JasperReportjr=JasperManager.compileReport(design);HashMapparameters=newHashMap();parameters.put("PAR_PEDID",1);//parameters.put("PARAMETRO_2", array[2]);//parameters.put("PARAMETRO_3", array[5]);//parameters.put("PARAMETRO_4", array[4]);//parameters.put("PARAMETRO_5",array[9]);JasperPrintimpressao=JasperManager.fillReport(jr,parameters,con);JasperViewerjrviewer=newJasperViewer(impressao,false);jrviewer.show();}catch(Exceptione){e.printStackTrace();}}/* Aqui chamamos o construtor de nossa classe para exibirmos o relatorio e 4ª parte*/publicstaticvoidmain(Stringargs[]){newRelatorioLaboratorio();System.out.println("ok");}}
espero q te ajude a iniciar
abraço
L
lksJF
Primeiramente, obrigado a vocês que responderam e me ajudaram a aumentar meu conhecimento… Por isso que a comunidade GUJ é sempre forte!!!
phmjunior
Estou seguindo seu exemplo e a classe criada com esse código funcionou perfeitamente!!! Pelo NetBeans mesmo, quando mando executar essa classe, visualizo a tela exibindo meu relatório, como eu queria!!! Muito OBRIGADO!
Só tem mais um probleminha… hehehe…
Considerando que minha aplicação é web, JSP + JSF, como havia dito antes… Como faço para chamar esse relatório (utilizando essa classe que acabei de criar) através do clique de um botão, por exemplo??? Desculpe se a pergunta for muito óbvia, é que estou aprendendo…
Conto novamente com a ajuda de vocês!!! Vlw e aguardo…
[]'s
P
phmjunior
você utiliza o botão : commandButton ??
L
lksJF
Não… Acho que não é commandButton…
Um button normal, que fica disponível na paleta de componentes do NetBeans…
P
phmjunior
você usa o jsf certo?
se sim, então você usa os componentes jsf como por exemplo managedBean.
cria no tua aplicação ond for chamar o relatório um h:commandLink
Assim:
Consegui fazer o que eu queria… Não usei o ManagedBean como disse, mas suas respostam foram de grande ajuda.
Fiz algumas alterações na classe que postou de exemplo e adaptei ela a minha necessidade… Consegui chamar o relatório como queria através de um button… Tudo certinho!
Mais tarde vou postar a classe alterada para ficar a disposição da galera!
Mais uma vez, obrigado GUJ e vlw phmjunior!!!
P
phmjunior
blz cara parabéns!!!
isso posta sua classe alterada pra galera ver q não complicado.
abraço
L
lksJF
Tá ai galera, conforme o prometido:
importjava.io.IOException;importjava.io.StringReader;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.ResultSet;importjava.sql.Statement;importjava.util.HashMap;importnet.sf.jasperreports.engine.JasperManager;importnet.sf.jasperreports.engine.JasperPrint;importnet.sf.jasperreports.engine.JasperReport;importnet.sf.jasperreports.engine.design.JasperDesign;importnet.sf.jasperreports.view.JasperViewer;/* Primeira parte */publicclassRelatorio{privateConnectioncon=null;privateStringdriver="org.postgresql.Driver";privateStringendereco="jdbc:postgresql://localhost:5432/bancoteste";privateStringuser="user";privateStringpass="user";privateResultSetrs=null;privateStringvalores[]=newString[10];// private int chamada = 1;// Localizar pasta que contém os relatórios:// private String dir = System.getProperty("user.dir") + "/web/";privateStringdir="Aqui o diretorio do seu projeto ou utilizar a linha anterior";// private StringReader stream;/*Segunda parte */publicvoidGeraRelatorio(Stringsql,Stringrelatorio){/* Efetua a conexao a base de dados e coleta os valores da base de dados armazenando-os em um array para ser futuramente utilizado */try{if(con==null){Class.forName(driver);con=DriverManager.getConnection(endereco,user,pass);Statementstatement=con.createStatement();rs=statement.executeQuery(sql);HashMapteste=newHashMap();while(rs.next()){//for até o numero de campos da tabelafor(inti=1;i<10;i++){valores[i]=rs.getString(i);}}}}catch(Exceptione){System.err.println("Problemas apresentados na operacao de conexao");e.printStackTrace();}/* Inicio do bloco que ira gerar nossos relatorios e 3ª parte */try{//String array[] = valores;JasperDesigndesign=JasperManager.loadXmlDesign(dir+"relatorios/"+relatorio+".jrxml");JasperReportjr=JasperManager.compileReport(design);HashMapparameters=newHashMap();parameters.put("PAR_PEDID",1);//parameters.put("PARAMETRO_2", array[2]);//parameters.put("PARAMETRO_3", array[5]);//parameters.put("PARAMETRO_4", array[4]);//parameters.put("PARAMETRO_5",array[9]);JasperPrintimpressao=JasperManager.fillReport(jr,parameters,con);JasperViewerjrviewer=newJasperViewer(impressao,false);jrviewer.show();con.close();}catch(Exceptione){e.printStackTrace();}}}
Assim, eu consegui chamar essa classe e exibir o relatório na tela ao clicar em um button, passando o SQL e o nome do arquivo do relatório como parâmetros…
Tem muita coisa a ser melhorada, mas já é um grande passo !!!
[]'s
J
juniorsatanas
lksJF a tua dúvida e a minha dúvida !
Mano, esse teu sistema e comercial ou tu poderia disponibilizar o código para estudo ?