JSF + IReport + JasperReport duvida

0 respostas
LPJava

ae pessoal, to com um probleminha aqui que ja gastei horas e nao conseguir resolver, nao sei se alguem ja passou por isso, e pode ajudar.

A situação, preciso gerar um relatorio pdf com ireport + jasperreport, até blz, os relatorios estão sendo gerado, mas o problema que o codigo atual ta tudo misturado com o controlador JSF, e quero que o codigo que gere o relatorio pdf fique em uma classe separada, e que la no controlador chame o metodo responsavel por gerar o relatorio, mas to tendo a excecao a seguir:
java.lang.IllegalStateException: getOutputStream() has already been called for this response
	at org.apache.catalina.connector.Response.getWriter(Response.java:608)
	at org.apache.catalina.connector.ResponseFacade.getWriter(ResponseFacade.java:200)
	at com.sun.facelets.FaceletViewHandler.createResponseWriter(FaceletViewHandler.java:414)
	at com.sun.facelets.FaceletViewHandler.renderView(FaceletViewHandler.java:571)
	at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:106)
	at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251)
	at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:144)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:245)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:243)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:201)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:163)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:108)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:401)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:242)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:267)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:245)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:260)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)

Já olhei tudo e nao consigo ver o motivo da exceção ou escrita e depois chamada do stream acima. Abaixo, os metodos chaves:

na classe Controler.java
private UsuarioDAO usuarioDAO = new UsuarioDAO();
	
	public String gerarRelatorioUS() throws IOException {
		
		List listaUs = usuarioDAO.listaUSALL();				 
			
		return new GerarRelatorio().relatorioUSALL(listaUs);
	}
na classe geradorrelatorio
public class GerarRelatorio {	
	public String relatorioUSALL(List lista){
		try{
		FacesContext context = FacesContext.getCurrentInstance(); 
		HttpServletResponse response = (HttpServletResponse) context.getExternalContext().getResponse();
		
		//caminho do jrxml
		InputStream pathjrxml = getClass().getResourceAsStream("../jrxml/relatorioblog.jrxml");
		
			response.setContentType("application/pdf");
			response.setHeader("Content-Disposition", "attachment; filename=\"relatoriotodosusuarios.pdf\"");
		ServletOutputStream responseStream = response.getOutputStream();
		
		JasperReport pathReport = JasperCompileManager.compileReport(pathjrxml);
		JasperPrint print = JasperFillManager.fillReport(pathReport, null, new JRBeanCollectionDataSource(lista));
		JasperExportManager.exportReportToPdfStream(print, responseStream);
			
			responseStream.flush();
			responseStream.close();
			context.renderResponse();
			context.responseComplete();
		}catch (Exception e) {
			return "failreport";
		}
		return "donereport";

alguma sugestão?

flw.

Criado 28 de novembro de 2010
Respostas 0
Participantes 1