JSF + Jasper

Galera mais uma vez estou aqui para tirar mais uma dúvida.
Estou usando JSF e to gerando um relatorio com JASPER, blz ele gera o PDF mais deixa a seguinte mensagem no console do Tom Cat…

[quote]
java.lang.IllegalStateException: Cannot forward after response has been committed
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:313)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:301)
at org.apache.myfaces.context.servlet.ServletExternalContextImpl.dispatch(ServletExternalContextImpl.java:419)
at org.apache.myfaces.application.jsp.JspViewHandlerImpl.renderView(JspViewHandlerImpl.java:211)
at org.apache.myfaces.lifecycle.RenderResponseExecutor.execute(RenderResponseExecutor.java:41)
at org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:132)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:140)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
at java.lang.Thread.run(Unknown Source)[/quote]

Teria alguma coisa para fazer no MB que estou esquecendo de implementar!?!?!

[code]
public class ReportMB implements Serializable{
public void generateReport(ActionEvent actionEvent)
throws ClassNotFoundException, SQLException, IOException, JRException{

FacesContext context = FacesContext.getCurrentInstance();
HttpServletResponse response = (HttpServletResponse) context.getExternalContext().getResponse();
InputStream reportStream = context.getExternalContext().getResourceAsStream("/reports/FirstReport.jasper");

HashMap<String, String> parametros = new HashMap<String, String>();
parametros.put("Caminho", "C:\\dial.ematos\\workspace\\Exemplo\\WebContent\\img\\BVcolor.gif");

ServletOutputStream servletOutputStream = response.getOutputStream();

JRDataSource dataSource = createReportDataSource();    

JasperRunManager.runReportToPdfStream(reportStream, servletOutputStream,
		parametros, dataSource);

response.setContentType("application/pdf");
reportStream.close();
servletOutputStream.flush();
servletOutputStream.close();

}
private JRDataSource createReportDataSource()
{
JRBeanCollectionDataSource dataSource;
Collection reportRows = initializeBeanCollection();

    dataSource = new JRBeanCollectionDataSource(reportRows);

    return dataSource;
  }
	private Collection initializeBeanCollection() {
	    ArrayList<Pessoa> reportRows = new ArrayList<Pessoa>();

	    reportRows.add(new Pessoa("Edvaldo","Santiago",new Endereco("Rua 1",2)));
	    reportRows.add(new Pessoa("Francisco","Santiago",new Endereco("Rua 2",3)));
	    			
	    return reportRows;
	}

}[/code]

Valeu pela força…
Fui. :smiley:

Opa.

servletOutputStream.close();

Sempre que você executa um método de um ManagedBean , ele vai te redirecionar para algum lugar que você descrever(mesmo que seja para a própria página).
E ele faz esse redirecionamento pelo Response porém, como você fechou o stream do response, ele dá essa exception.
Como a exception mesma disse: "Cannot forward after response has been committed ", ou seja, você não pode redirecionar nada depois que já fechou o stream :slight_smile:

Fala andre_a_s,
Entao carinha eu fiz o que vc falou mais mesmo assim continua gerando o mesmo erro no console.
O negocio ta sinistro…kkkk
:stuck_out_tongue:

	public void generateReport(ActionEvent actionEvent)
	  								throws ClassNotFoundException, SQLException, IOException, JRException{
    
    FacesContext context = FacesContext.getCurrentInstance();
    HttpServletResponse response = (HttpServletResponse) context.getExternalContext().getResponse();
    InputStream reportStream = context.getExternalContext().getResourceAsStream("/reports/FirstReport.jasper");

    HashMap<String, String> parametros = new HashMap<String, String>();
    parametros.put("Caminho", "C:\\dial.ematos\\workspace\\Exemplo\\WebContent\\img\\BVcolor.gif");
    
    ServletOutputStream servletOutputStream = response.getOutputStream();

    JRDataSource dataSource = createReportDataSource();    
    
    JasperRunManager.runReportToPdfStream(reportStream, servletOutputStream,
    		parametros, dataSource);
    
    response.setContentType("application/pdf");
    servletOutputStream.flush();
    
  }

Erro:

Q estranho… tentou tirar o servletOutputStream.flush(); ?