1
votes

I'm writing jsf web application. i use primefaces and glassfish in netbeans.

when i run index.xhtml. it doesn't show some primefaces tags( some show)

<p:dataTable id="customerTable" var="customerTable" 
   value="#{controller.CustomerJpaController.findCustomerEntities}" 
   paginator="true" rows="10" paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}" 
   rowsPerPageTemplate="5,10,15"> 
   <f:facet name="header">Customers</f:facet> 
   <p:column><f:facet name="header"><h:outputText value="Customer#" /></f:facet>   <h:outputText value="#{model.customer.customerid}" /> </p:column>
</p:dataTable>

i got this error

WARNING: JSF1087: Unable to generate Facelets error page as the response has already been committed. SEVERE: javax.faces.FacesException: PWC3999: Cannot create a session after the response has been committed javax.faces.FacesException: PWC3999: Cannot create a session after the response has been committed at com.sun.faces.context.ExceptionHandlerImpl.handle(ExceptionHandlerImpl.java:142) at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:119) at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139) at javax.faces.webapp.FacesServlet.service(FacesServlet.java:594) at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1550) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:281) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175) at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:161) at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:331) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231) at com.sun.enterprise.v3.services.impl.ContainerMapper$AdapterCallable.call(ContainerMapper.java:317) at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:195) at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:860) at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:757) at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1056) at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:229) at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137) at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104) at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90) at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79) at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54) at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59) at com.sun.grizzly.ContextTask.run(ContextTask.java:71) at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532) at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513) at java.lang.Thread.run(Thread.java:722) Caused by: java.lang.IllegalStateException: PWC3999: Cannot create a session after the response has been committed at org.apache.catalina.connector.Request.doGetSession(Request.java:2886) at org.apache.catalina.connector.Request.getSession(Request.java:2583) at org.apache.catalina.connector.RequestFacade.getSession(RequestFacade.java:920) at com.sun.faces.context.ExternalContextImpl.getSession(ExternalContextImpl.java:155) at com.sun.faces.renderkit.ServerSideStateHelper.writeState(ServerSideStateHelper.java:175) at com.sun.faces.renderkit.ResponseStateManagerImpl.writeState(ResponseStateManagerImpl.java:122) at com.sun.faces.application.StateManagerImpl.writeState(StateManagerImpl.java:166) at com.sun.faces.application.view.WriteBehindStateWriter.flushToWriter(WriteBehindStateWriter.java:225) at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:419) at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:131) at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:288) at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:121) at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) ... 26 more

could anyone help me fix this and give me its cause?

many thanks

1
After you entered the question's title "PWC3999: Cannot create a session after the response has been committed" on ask question form, you were presented a list of possible duplicates. Why didn't you bother to take a look in them?BalusC

1 Answers

3
votes

Hmm, seems like one of your tags is trying to set session attributes, and you don't have a session yet.

To set a session attribute, the session should be created, and the session id should be in a cookie in the HTTP Response header. But since you're already rendering the page, the HTTP headers are already sent to the client, so you can't send the session cookie.

In your case, a <p:dataTable paginator="true"..> uses session attributes to keep track of current page number etc.

Try to ensure you are already in a session before rendering the output page. E.g. by letting the user log in or something. For example, in your controller, do FacesContext.getCurrentInstance().getExternalContext().getSession(true). This will create a session before you render the page.