Estou em uma briga danada com o IReport. Estou tentando atravez do J2EE executar o IReport para gerar meus relatorios. O problema é que ele nunca acha o arquivo .jasper. Ja coloquei o arquivo em tds as pastas possiveis.
Projeto
WebContent
WEB-INF
Classes
Mais ele nunca acha. Fiz o teste com um main e ele executou perfeitamente, não sei c esso erro acontece por eu estar usando packages em minhas classes.
Alguem sabe o loca certo para eu colocar os arquivos .jasper?
Galera, dando uma procurada eu vi q o problema eh em relação ao caminho do arquivo. Fiz um teste e vi q c eu coloca no C:\x.jasper da certo.
Entaum como eu pego o caminho da minha aplicação dinamicamente no servidor? pq quando eu coloco so o nome do arquivo para ele procurar ele esta c perdendo por não saber aonde procurar.
Valeu galera
andrik
Olá rickab7, a interface ServletContext possui um método chamado getRealPath onde você passa o caminho relativo de um arquivo e ele te retorna o caminho absoluto.
Agora, se eu colocar na string diretamente D:/Projeto/planocompra/… isso da certo, pq?
V
vm1
Vc colocou o jasper no pacote que vc criou?
Este he o metodo que tenho rodando.
publicStringactionRelatorio(){try{//criar um Map com os parametros, como o título. Se não tiver parametros, criar um Map vazioMapparameters=newHashMap();parameters.put(“Title”,“ListadeEstados”);//criar um objeto ServletOutputStream com base no responseFacesContextcontext=FacesContext.getCurrentInstance();HttpServletResponseresponse=(HttpServletResponse)context.getExternalContext().getResponse();ServletOutputStreamservletOutputStream=response.getOutputStream();//Criar um InputStream a partir do arquivo fonte do relatórioInputStreamreportStream=context.getExternalContext().getResourceAsStream("/WEB-NF/classes/Util/ireport/teste.jasper");/*** Este comando criará o pdf e o colocará diretamente noobjeto response* É necessário um InputStream, ServletOutputStream, um Map (pode ser new HashMap) e um objeto que extende JRDataSource*/JasperRunManager.runReportToPdfStream(reportStream,servletOutputStream,parameters,ds);}catch(Exceptione){e.printStackTrace();}returnnull;}
R
rickab7
Ola!
Cara, la no InputStream o metodo getExternalContext() ta dando erro, como se ele não existise na interface Context
V
vitorosan
Olá,
Eu também tive problemas com o jasper para ele encontrar o arquivo através de um caminho relativo, mas resolvi o problema do caminho realitvo utilizando o seguinte método do ClassLoader: ClassLoader.getSystemResourceAsStream(“relatorio.jasper”);
Se você tem o arquivo jasper dentro de um pacote, basta coloca o nome do pacote antes: ClassLoader.getSystemResourceAsStream("/relatorio.jasper");
Nunca coloque a barra no início do caminho, senão o arquivo não é encontrado.
Este método retorna um InputStream e pode ser usado com o fillManager do jasperreports.
Espero ter ajudado.
M
mrsmylle
Opa, acho que isso tem a ver como você está pegando o caminho!!
R
rickab7
Cara, tudo bem?!!..
Assim como o getRealPath, este que você me mostrou está me trazendo null?
Pq será?
R
rickab7
Cara, tudo bem??!!
Não deu certo, ta trazendo null. você sabe pq?
Kleber-rr
EAe pessoal, blz??
Sei que o post é antigão, mas to nessa briga feia de faca tb... hhehee
o meu problema é que meu método não funciona. Todos os outros métodos do bean funcionam, menos essa carniça... hehehe
publicclassOrgaoGestorHandler{privateStringsaida;privateList<OrgaoGestor>listOg;//...// MÉTODOS PARA IMPRIMIR RELATÓRIOprivateStringgetDiretorioReal(Stringdiretorio){HttpSessionsession=(HttpSession)FacesContext.getCurrentInstance().getExternalContext().getSession(false);System.out.println("getDireitorioReal");returnsession.getServletContext().getRealPath(diretorio);}privateStringgetContextPath(){HttpSessionsession=(HttpSession)FacesContext.getCurrentInstance().getExternalContext().getSession(false);System.out.println("getContextPath");returnsession.getServletContext().getContextPath();}privatevoidpreenchePdf(JasperPrintprint)throwsJRException{// Pego o caminho completo do PDF desde a raizsaida=getDiretorioReal("/pdf/relatorio.pdf");// Exporto para PDFJasperExportManager.exportReportToPdfFile(print,saida);/* * Jogo na vari�vel sa�da o nome da aplica��o mais o caminho para o PDF. * Essa vari�vel ser� utilizada pela view */saida=getContextPath()+"/pdf/relatorio.pdf";}publicStringimprimirRelatorio(){//ESSA É A CARNIÇA...System.out.println("metodo de impressao");saida=null;Stringjasper=getDiretorioReal("jasper/orgaogestor.jasper");JRDataSourcejrds=newJRBeanCollectionDataSource(listOg);// Connection conexao = null;try{// Mando o jasper gerar o relat�rioJasperPrintprint=JasperFillManager.fillReport(jasper,null,jrds);// Gero o PDFpreenchePdf(print);System.out.println("pdf gerado");}catch(Exceptione){e.printStackTrace();System.out.println("erro: "+e);}return"exibeRelatorio";}