Jasper Report

Hi,

I got the error below when trying to generate a jasper report when a button in JSF is clicked. Anybody has encountered this problem before?

ERROR [org.jboss.web.localhost.Engine] StandardWrapperValve[Faces Servlet]: Servlet.service()for servlet Faces Servlet threw exception

java.lang.IllegalStateException: Cannot forward after response has been committed

at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:324)

at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:312)

at com.sun.faces.context.ExternalContextImpl.dispatch(ExternalContextImpl.java:322)

at com.sun.faces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:147)

at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:87)

at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:200)

at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:117)

at javax.faces.webapp.FacesServlet.service(FacesServlet.java:198)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)

at net.sourceforge.myfaces.custom.fileupload.MultipartFilter.doFilter(MultipartFilter.java:88)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:186)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)

at com.infopro.dt.ui.filter.SystemStatusFilter.doFilter(SystemStatusFilter.java:89)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:186)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)

at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:75)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:186)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)

at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214)

at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)

at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)

at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:198)

at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:152)

at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)

at org.jboss.web.tomcat.security.CustomPrincipalValve.invoke(CustomPrincipalValve.java:66)

at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)

at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:153)

at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)

at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:54)

at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)

at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)

at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137)

at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)

at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:118)

at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)

at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)

at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)

at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)

at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)

at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929)

at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160)

at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)

at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705)

at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)

at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)

at java.lang.Thread.run(Thread.java:534)

[4758 byte] By [Dudleya] at [2007-11-27 4:16:18]
# 1
Hmm, I've never used Jasper before but this guy seemed to find a solution, I think: http://forum.java.sun.com/thread.jspa?threadID=683891&messageID=3983178I hope it's a useful link for you.Cheers,Illu
Illua at 2007-7-12 9:22:47 > top of Java-index,Enterprise & Remote Computing,Web Tier APIs...
# 2
Yup.. but he's using normal JSP. How do I solve it in JSF?Anybody has got any opinions?
Dudleya at 2007-7-12 9:22:47 > top of Java-index,Enterprise & Remote Computing,Web Tier APIs...
# 3

U r trying to forward to another jsp after the response from first jsp is commited to response.

u r code like this

out.write("some thing");

requestDisp.froward();

in this case it throws IllegalStateException.

try to remove out.write() or put one line out.flush() after it.

but it is not recomended when dealing with forward to another resource.

veerjaa at 2007-7-12 9:22:47 > top of Java-index,Enterprise & Remote Computing,Web Tier APIs...
# 4
I do something like this <h:commandButton value="#{msg['rpt.confirm']}" action="#" actionListener="#{ocasBean.generate}" />
Dudleya at 2007-7-12 9:22:47 > top of Java-index,Enterprise & Remote Computing,Web Tier APIs...
# 5

Alright here is a Sample example for you.... and don't associate an action to it...

<h:commandButton value="#{msg['rpt.confirm']}" actionListener="#{ocasBean.generate}" />

public void generate(ActionEvent actionEvent)

throws ClassNotFoundException, SQLException, IOException, JRException

{

Connection connection;

FacesContext context = FacesContext.getCurrentInstance();

HttpServletResponse response = (HttpServletResponse) context

.getExternalContext().getResponse();

InputStream reportStream = context.getExternalContext()

.getResourceAsStream("/reports/DbReport.jasper");

response.setContentType("application/pdf");

ServletOutputStream servletOutputStream = response.getOutputStream();

Class.forName("com.mysql.jdbc.Driver");

connection = DriverManager

.getConnection("jdbc:mysql://localhost:3306/flightstats?user=root&password=password");

JasperRunManager.runReportToPdfStream(reportStream, servletOutputStream,

new HashMap(), connection);

connection.close();

servletOutputStream.flush();

servletOutputStream.close();

}

Hope that might help :)

REGARDS,

RaHuL

RahulSharnaa at 2007-7-12 9:22:47 > top of Java-index,Enterprise & Remote Computing,Web Tier APIs...