PWC3999:在提交响应后无法创建会话

时间:2013-06-03 15:03:45

标签: jsf session primefaces

我正在编写jsf web应用程序。我在netbeans中使用primefaces和glassfish。

当我运行index.xhtml时。它没有显示一些primefaces标签(一些显示)

<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>

我收到了这个错误

  

警告:JSF1087:无法生成Facelets错误页面   响应已经提交。严重:   javax.faces.FacesException:PWC3999:无法在之后创建会话   响应已经提交javax.faces.FacesException:PWC3999:   在提交响应后无法创建会话   com.sun.faces.context.ExceptionHandlerImpl.handle(ExceptionHandlerImpl.java:142)     在com.sun.faces.lifecycle.Phase.doPhase(Phase.java:119)at   com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)     在javax.faces.webapp.FacesServlet.service(FacesServlet.java:594)at   org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1550)     在   org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:281)     在   org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)     在   org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655)     在   org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595)     在   org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:161)     在   org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:331)     在   org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231)     在   com.sun.enterprise.v3.services.impl.ContainerMapper $ AdapterCallable.call(ContainerMapper.java:317)     在   com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:195)     在   com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:860)     在   com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:757)     在   com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1056)     在   com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:229)     在   com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)     在   com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)     在   com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)     在   com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)     在   com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)     在   com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)     在com.sun.grizzly.ContextTask.run(ContextTask.java:71)at   com.sun.grizzly.util.AbstractThreadPool $ Worker.doWork(AbstractThreadPool.java:532)     在   com.sun.grizzly.util.AbstractThreadPool $ Worker.run(AbstractThreadPool.java:513)     在java.lang.Thread.run(Thread.java:722)引起:   java.lang.IllegalStateException:PWC3999:无法创建会话   在响应已经提交之后   org.apache.catalina.connector.Request.doGetSession(Request.java:2886)     在   org.apache.catalina.connector.Request.getSession(Request.java:2583)     在   org.apache.catalina.connector.RequestFacade.getSession(RequestFacade.java:920)     在   com.sun.faces.context.ExternalContextImpl.getSession(ExternalContextImpl.java:155)     在   com.sun.faces.renderkit.ServerSideStateHelper.writeState(ServerSideStateHelper.java:175)     在   com.sun.faces.renderkit.ResponseStateManagerImpl.writeState(ResponseStateManagerImpl.java:122)     在   com.sun.faces.application.StateManagerImpl.writeState(StateManagerImpl.java:166)     在   com.sun.faces.application.view.WriteBehindStateWriter.flushToWriter(WriteBehindStateWriter.java:225)     在   com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:419)     在   com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:131)     在   javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:288)     在   com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:121)     在com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)... 26更多

任何人都可以帮我解决这个并给我原因吗?

非常感谢

1 个答案:

答案 0 :(得分:3)

嗯,好像你的一个标签试图设置会话属性,而你还没有会话。

要设置会话属性,应创建会话,并且会话ID应位于HTTP响应标头中的cookie中。但由于您已经在渲染页面,因此HTTP标头已经发送到客户端,因此您无法发送会话cookie。

在您的情况下,<p:dataTable paginator="true"..>使用会话属性来跟踪当前页码等。

在渲染输出页面之前,请确保您已在会话中。例如。通过让用户登录或其他东西。例如,在您的控制器中,执行FacesContext.getCurrentInstance().getExternalContext().getSession(true)。这将在您呈现页面之前创建一个会话。