Vraptor + ireport

8 respostas
monike

Boa Tarde Galera!
Estou usando pela primeira vez vraptor x iReport..mas estou tendo problemas.
Depois de executar abre-se uma janela para escolher o programa.Porém o mesmo se encontra com o nome relatorio.criar.logic e nao com o nome certo teste.pdf e ainda abre em branco.
Se alguem ´puder me ajudar agradeço muito!!!

package br.gov.inpi.srv.controle;

import java.io.IOException;
import java.util.List;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletResponse;

import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;

import org.vraptor.annotations.Component;
import org.vraptor.annotations.Out;
import org.vraptor.annotations.Viewless;

import br.gov.inpi.srv.model.Veiculo;
import br.gov.inpi.srv.repository.RepositoryFactory;
import br.gov.inpi.srv.repository.VeiculoRepository;

@Component()
public class RelatorioLogic {
	
	private VeiculoRepository veiculoRepostorio = RepositoryFactory.getInstance().getVeiculoRepository();
	
	@Out
	private List<Veiculo> listaDeVeiculos;
	
	
	@Viewless
	 	public void criar(final ServletContext context, HttpServletResponse response,  Veiculo veiculo) throws IOException {
		 	
	 		try {
	 			
	 		    listaDeVeiculos = (List<Veiculo>) veiculoRepostorio.obterTodos();
	 		    
		 		// Localiza o contexto da pasta onde esta localizado o .jasper
		 		String pathJasper = context.getRealPath("WEB-INF/report/") + "/";
	 			
	 			// Recebe a lista  populada
	 			JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(listaDeVeiculos);
	 			
	 			// pega o ds + a conexao para ir ate o ireport para listar dentro do relatorio
	 			JasperPrint impressao = JasperFillManager.fillReport(pathJasper + "/tese.jasper", null, ds);
	 
	 		
	 		response.setContentType("tese/pdf");
	 		JasperExportManager.exportReportToPdfFile(impressao, pathJasper+ "/tese.pdf");
	 		
	 		
	 		//response.sendRedirect("/srv/veiculo.listarTodos.logic");		
	 			} catch (Exception e) {			
	 				e.getMessage();
	 		}
	 
	 	}		
}
JSP:
<input class="inputBts" type="button" value="relatorios" class="input_submit" onclick="GOTO('relatorio.criar.logic');"/>

8 Respostas

G

Altere a linha 48 onde diz:

Para isso:

response.setContentType("application/pdf"); response.setHeader("Content-disposition", "attachment; filename=tese.pdf");

Ou então use o componente de download do vraptor:

http://vraptor.caelum.com.br/documentacao/downloading/

monike

obrigada Galera!

@Component()

@InterceptedBy(AutorizadorInterceptor.class)

public class RelatorioLogic {
private VeiculoRepository veiculoRepostorio = RepositoryFactory.getInstance().getVeiculoRepository();

@Out
private List<Veiculo> listaDeVeiculos;


@Viewless
 	public void criar(final ServletContext context, HttpServletResponse response,  Veiculo veiculo) throws IOException {
	 	
 		try {
 			
 		listaDeVeiculos = (List<Veiculo>) veiculoRepostorio.obterTodos();
 		    
 		// Localiza o contexto da pasta onde esta localizado o .jasper
	 	String pathJasper = context.getRealPath("WEB-INF/report/") + "/";
 			
 		// Recebe a lista  populada
 		JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(listaDeVeiculos);
 			
 		// pega o ds + a conexao para ir ate o ireport para listar dentro do relatorio
 		JasperPrint impressao = JasperFillManager.fillReport(pathJasper + "/tese.jasper", null, ds);
 
 		//response.setContentType("tese/pdf");
 		
 		response.setContentType("application/pdf");  
 		response.setHeader("Content-disposition", "attachment; filename=tese.pdf");
 		
 		 byte[] bytes = JasperExportManager.exportReportToPdf(impressao);  
 		 byte[] arquivo = bytes;  
 		
 		 String nomeDoArquivo = "tese.pdf";
 		 response.setContentType("application/x-msdownload");
 		 response.setHeader("Content-Disposition", "attachment; filename=".concat(nomeDoArquivo));
 		 response.setContentLength(arquivo.length);
 		 ServletOutputStream sos = response.getOutputStream();
 		 sos.write(arquivo, 0,arquivo.length);
 		 sos.flush();
 		 sos.close();
		
 			} catch (Exception e) {			
 				e.getMessage();
 		}
 			
 	}

}

monike

Bom dia galera!
Como faço para exibir meu relatorio em HTML?
Se alguém puder me ajudar agradeço.

bjsss

JasperPrint impressao = JasperFillManager.fillReport(pathJasper + "/tese.jasper", null, ds); byte[] arquivo = bytes; byte[] bytes = JasperExportManager.exportReportToHtmlFile(impressao) ;

G

Da mesma forma, basta você alterar o content-type de application/pdf para text/html.

monike

fiz assim,mas quando abre em HTML nao mostra nada.Acredito que seja porque essa parte do código está comentada //sos.write(arquivo, 0,arquivo.length);
Eu nao consegui jogar pra byte = JasperExportManager.exportReportToHtmlFile(impressao,nomeArqHTML); como fiz anteriormente para PDF.

@Component()
@InterceptedBy(AutorizadorInterceptor.class)
public class RelatorioLogic {
	
	private VeiculoRepository veiculoRepostorio = RepositoryFactory.getInstance().getVeiculoRepository();
	
	@Out
	private List<Veiculo> listaDeVeiculos;
	
	
	@Viewless
	 	public void criar(final ServletContext context, HttpServletResponse response,  Veiculo veiculo) throws IOException {
		 	
	 		try {
	 			
	 		listaDeVeiculos = (List<Veiculo>) veiculoRepostorio.obterTodos();
	 		    
	 		// Localiza o contexto da pasta onde esta localizado o .jasper
		 	String pathJasper = context.getRealPath("WEB-INF/report/") + "/";
	 			
	 		// Recebe a lista  populada
	 		JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(listaDeVeiculos);
	 			
	 		// pega o ds + a conexao para ir ate o ireport para listar dentro do relatorio
	 		JasperPrint impressao = JasperFillManager.fillReport(pathJasper + "/tese.jasper", null, ds);

	 		
//	 		 byte[] bytes = JasperExportManager.exportReportToPdf(impressao);  
//	 		 byte[] arquivo = bytes;  
//	 		 
	 		 
	 		//HTML
	 		String nomeArqHTML = "tese.html";
	 		response.setContentType("tese/html");
	 		JasperExportManager.exportReportToHtmlFile(impressao,nomeArqHTML); 
	 		 
	 		
	 		 //response.setContentType("application/x-msdownload");
	 		 response.setHeader("Content-Disposition", "attachment; filename=".concat(nomeArqHTML));
//	 		 response.setContentLength(arquivo.length);
	 		 ServletOutputStream sos = response.getOutputStream();
//	 		 sos.write(arquivo, 0,arquivo.length);
	 		 sos.flush();
	 		 sos.close();
	 		 		

	 			} catch (Exception e) {			
	 				e.getMessage();
	 		}
	 			
	 	}
G

Altere o content type para text/html conforme

response.setContentType(“text/html”);

E descomente a linha 42, pois é lá que os bytes são gravados.

monike

Mas ai que está o problema, eu não consigo jogar ele pra byte só quando é para PDF

byte[] bytes = JasperExportManager.exportReportToPdf(impressao); eu só consigo fazer assim,direto
JasperExportManager.exportReportToHtmlFile(impressao,"c:\\teste.html");

Ele grava o relatorio no path c:\\teste.html,mas assim que ele abre, abre no navegador todo em branco..pq está montando a url errada:

file:///C:/DOCUME~1/MOANUN~2/CONFIG~1/Temp/tese-12.html

//HTML
String nomeArqHTML = "tese.html";
	 		response.setContentType("tese/html");
	 		response.setHeader("Content-Disposition", "attachment; filename=".concat(nomeArqHTML));
	 		JasperExportManager.exportReportToHtmlFile(impressao,"c:\\teste.html");
juniorsatanas

# public class RelatorioLogic { ta usando Vraptor 2 ou 3 ?

Criado 19 de novembro de 2009
Ultima resposta 8 de jan. de 2010
Respostas 8
Participantes 3