[Logo] Mentawai Forum - Mentawai Web Framework
  [Search] Search   [Recent Topics] Recent Topics   [Members]  Member Listing   [Groups] Back to home page 
[Register] Register / 
[Login] Login 
Mentawai + JasperReports  XML
Forum Index -> Comentários Gerais Go to Page: 1, 2 Next 
Author Message
Tijolo


[Avatar]

Joined: 19/04/2006 20:18:55
Messages: 4
Offline

Pessoa, estou tentando integrar o Mentawai com o Jasper e fazer uma Action gerar um relatório em pdf.

Quanto a Action consegui fazer algo perto do que eu gostaria!

Code:
 public String getTest()
 	{
 		String pathJasper = "C:/"; //usando caminho do .jasper 
 		String path = "C:/"; //salvando o PDF no C:\ da maquina! Algo tosco mas já é algo!
 		
 		conexao();
 		
 		Map parametros = new HashMap();
 		parametros.put("SQL","SELECT * FROM usuarios");
 		
 		try {						
 			JasperPrint impressao = JasperFillManager.fillReport(pathJasper	+ "rptTeste.jasper", parametros, con);
 									
 			JasperManager.printReportToPdfFile(impressao, path+ "RelatorioTeste.pdf");
 			
 			return SUCCESS;
 			
 		} catch (Exception e) {
 			return ERROR;
 		}
 	}
 


O trecho a acima cria e salva um relatório em PDF, mas eu gostaria de abri-lo automaticamente, sem precisar salvar, algo como jogar em Stream e abrir pro usuário na hora.

Alguem pode me ajudar no que falta?
Lobo


[Avatar]

Joined: 23/01/2006 02:17:14
Messages: 841
Location: Fortaleza-CE
Offline

cara posso adiantar um lance mas tipo essa tua dúvida ta mais pra fórum de jasper reports do que mentawai não acha ?

vou trab com jasper e mentawai daqui a 1 mês mais ou menos quando eu for migrar mais um sistema pro mentawai,
mas acho que você não vai esperar até lá

mais vai uma ajuda :

Code:
 response.setHeader("Expires", ""); 
 response.setHeader("Cache-Control", "");
 response.setHeader("Pragma", "");
 response.setContentType("application/PDF"); 
 
 
 byte[] relatorio = (byte[])session.getAttribute("array_byte");
 ServletOutputStream out_pdf = response.getOutputStream();
 response.setContentLength(relatorio.length);
 out_pdf.write(relatorio, 0, relatorio.length);
 out_pdf.flush();
 out_pdf.close();
 


Cara to sem tempo, to responsável por 8 webapps ta animal o lance , mas
queria ter um tempo pra fazer umas receitas de bolo com cewolf, jfreechart ,
jasperreports essas e outras tecnologias.


Atenciosamente,
Hélio Frota

Atenciosamente,
Hélio Frota

Helio Frota
10+ Java Programmer
heliofrota.com

Member
Mentawai Developer
Tijolo


[Avatar]

Joined: 19/04/2006 20:18:55
Messages: 4
Offline

Dae Lobo (e pessoal)

Dessa forma seria simples.
Mas dentro de um Servlet!
Eu não tenho um Servlet, tenho um action, logo não tenho response por exemplo...

Logo no meu AppManager eu tenho:

Code:
 action("/Relatorios", RelatoriosAction.class, "getTest")
 
 .on(SUCCESS, fwd("/home/index.jsp"))
 .on(ERROR, fwd("/home/index.jsp"))
 		
 .filter(common).filter(new InjectionFilter());
 


Isso pq o retorno da minha função getTest é um SUCCESS ou ERROR!

Entenderam?

Vi um outro tópico onde o Sérgio falou em criar um JasperConsequence para essa situação, mas não sei nem por onde começar!

Help me!!
Lobo


[Avatar]

Joined: 23/01/2006 02:17:14
Messages: 841
Location: Fortaleza-CE
Offline

To sacando o que você quer dizer

mas não posso quebrar a cabeça com isso agora

JasperConsequence eu ia por esse lado mesmo cara

fazer um lance pra depois que a ação
for efetuada que ao meu ver a ação seria a montagem do select , a compilação ou load do design do relatório.

alguma coisa depois dessa ação tem que mandar isso ai pro usuário.

mas não é impossível não se não ta dando pra desenrolar cara larga um scriptlet no jsp e espera eu ou outro cara fazer algum exemplo com o mentawai. na minha opinião o mentawai ta me ajudando e muito mas
vou ter q encarar isso ai tambem daqui a 1 mes, so vou me preocupar depois.

Atenciosamente,
Hélio Frota

Atenciosamente,
Hélio Frota

Helio Frota
10+ Java Programmer
heliofrota.com

Member
Mentawai Developer
saoj



Joined: 01/07/2005 09:59:17
Messages: 2846
Location: Rio de Janeiro, RJ
Offline


O trecho a acima cria e salva um relatório em PDF, mas eu gostaria de abri-lo automaticamente, sem precisar salvar, algo como jogar em Stream e abrir pro usuário na hora.
 


O org.mentawai.core.StreamConsequence faz exatamente isso!

Sergio Oliveira

saoj



Joined: 01/07/2005 09:59:17
Messages: 2846
Location: Rio de Janeiro, RJ
Offline

Se vc define uma consequence para sua action como StreamConsequence("application/pdf"), tudo que vc tem que fazer na action é:

Code:
 
 
 
 output.setValue("stream", INPUTSTREAM DO PDF);
 
 // ou
 
 outpu.setValue("stream", BYTE ARRAY COM O PDF);
 
 


E pode tb passar o Content-lenght:

Code:
 
 output.setValue("contentLength", TAMANHO EM BYTES DO PDF);
 
 







Sergio Oliveira

Tijolo


[Avatar]

Joined: 19/04/2006 20:18:55
Messages: 4
Offline

Pessoal, fiz e deu certo, então ae vai a dica:

Criei um Action normal e nele a seguinte função:

Code:
 public String getRelatorio()
 {
 
 	conexao(); //cria e inicia a variavel "con" que vai ser usada como dataSource pra o relatorio
 	
 	Map parametros = new HashMap();
 	parametros.put("SQL","SELECT * FROM usuarios"); //envia como paramentro para o meu relatorio o comando sql que vai usar para listar os dados
 		
 	try { //try :)						
 		JasperPrint impressao = JasperFillManager.fillReport(pathJasper	+ "rptTeste.jasper", parametros, con); //cria o relatório com o arquivo do iReports
 									
 		byte[] saida = JasperManager.printReportToPdf(impressao); //recupera os bytes do relatório criado
 			
 		output.setValue("stream", saida); //joga no output padrão "stream" os bytes do relatório
 		output.setValue("contentLength", saida.length);
 
 		return SUCCESS; //retorno de sucesso foi direcionado para o new StreamConsequence("application/pdf"), o que exibe o relatorio
 	}
 	catch (Exception e) //catch
 	{
 		e.printStackTrace();
 		return ERROR;
 	}
 }
 


Dae no ApplicationManager bastou adicionar

Code:
 /*
 * Relatorios!
 */
 action("/Relatorios", RelatoriosAction.class, "getRelatorio")
 
 .on(SUCCESS, new StreamConsequence("application/pdf")) //exibe o relatório na tela
 .on(ERROR, fwd("/relatorios/error.jsp")) //resposta de erro caso aconteça alguma cagada
 		
 .filter(common).filter(new InjectionFilter());
 


E era isso... resolveu os meus problema e exibiu o relatório!

Não sei se é melhor forma fazer mas ta funcionando!
saoj



Joined: 01/07/2005 09:59:17
Messages: 2846
Location: Rio de Janeiro, RJ
Offline

É a melhor e mais certa maneira de fazer.

Se possível coloca o contentLength tb no output, pois isso facilita a vida do browser.

(Vc viu o meu posto aí em cima ?)

Sergio Oliveira

Lobo


[Avatar]

Joined: 23/01/2006 02:17:14
Messages: 841
Location: Fortaleza-CE
Offline

maravilha

vou ler a api do mentawai antes de reinventar alguma coisa ou fora do padrão do framework.


Atenciosamente,
Hélio Frota

Atenciosamente,
Hélio Frota

Helio Frota
10+ Java Programmer
heliofrota.com

Member
Mentawai Developer
Tijolo


[Avatar]

Joined: 19/04/2006 20:18:55
Messages: 4
Offline


Se possível coloca o contentLength tb no output, pois isso facilita a vida do browser.

(Vc viu o meu posto aí em cima ?)
 


Hehehe, eu vi sim!
Mas não coloquei pq não sei pra que serve!
Hehehe, mas se tu ta dizendo pra por então ta la!

abraços!
saoj



Joined: 01/07/2005 09:59:17
Messages: 2846
Location: Rio de Janeiro, RJ
Offline

Quando o browser sabe o tamanho da coisa que ele está baixando é melhor pra ele... Pode exibir uma barra de progresso, e outras coisas mais que eu não me lembro... Já que vc tem esse valor não custa mandar para o browser...

Sergio Oliveira

fortunao


[Avatar]
Joined: 17/03/2006 05:49:22
Messages: 186
Offline

Tem algum exemplo ai?

se tiver mande pra fortunao ARROBA hotmail.com

Alex

Alex Fortuna
Desenvolvedor Mentawai


[Email] [MSN]
racelike



Joined: 12/07/2006 15:38:48
Messages: 15
Offline

valeu ai pessoal pelas dicas e pelos codigos expostos. o topico do Flush tb me ajudou a gerar um relatorio

so uma pergunta, se eu quiser gerar o relatorio em uma nova janela, como se fosse popup?

Eu faria isso com javascript? por exemplo, colocando alguma flag de resposta indicando que tem o relatorio pronto, e ai entao manda abrir uma janela pra exibir o conteudo?

era assim que eu fazia, sendo que no jsp que serve pro popup, tem mais ou menos o codigo que foi colocado na classe do mentawai com as linhas do output.setValue("...");

alias, igual ao codigo que o Helio colocou mais acima no segundo post
Rodrigo Morais


[Avatar]

Joined: 11/07/2006 11:32:23
Messages: 51
Location: Curitiba - PR
Offline

galera, o meu pdf abre em branco, pq será?
[MSN] [ICQ]
kingair



Joined: 25/08/2006 12:18:06
Messages: 251
Offline

Alguém aí já integrou Menta + JasperReports + Hibernate?

Abraço

Luiz Cantoni
 
Forum Index -> Comentários Gerais Go to Page: 1, 2 Next 
Go to:   
Powered by JForum 2.1.6 © JForum Team