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

Posted

技术标签:

【中文标题】PWC3999:提交响应后无法创建会话【英文标题】:PWC3999: Cannot create a session after the response has been committed 【发布时间】:2013-05-29 18:54:28 【问题描述】:

我正在编写 jsf 网络应用程序。我在 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) 在 com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139) 在 javax.faces.webapp.FacesServlet.service(FacesServlet.java:594) 在 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) 在 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 更多

谁能帮我解决这个问题并告诉我原因?

非常感谢

【问题讨论】:

在ask question 表单上输入问题标题“PWC3999:在提交响应后无法创建会话”后,您会看到可能重复的列表。你为什么不费心去看看它们? Adding <h:form> causes java.lang.IllegalStateException: Cannot create a session after the response has been committed的可能重复 【参考方案1】:

嗯,您的某个标签似乎正在尝试设置会话属性,而您还没有会话。

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

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

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

【讨论】:

我没有声明会话 bean。这是代码。之前用来正确渲染的页面。 客户:column> sry 这是我第一次使用这个网站 我将您的 xml 添加到原始问题并更新了我的答案。它是使用会话的分页器。 请查看右侧栏的“相关”列表。 OP 肯定不是第一个遇到这个问题的人。

以上是关于PWC3999:提交响应后无法创建会话的主要内容,如果未能解决你的问题,请参考以下文章

提交响应后无法调用 sendRedirect() [重复]

如何摆脱警告:PWC4011:无法将请求字符编码设置为 UTF-8

jetty 8.x, 9.x无法加载jstl的PWC6188问题,jstlpwc6188

图像字节 [] 到 Grails 中的 response.outputStream 导致“响应提交后无法转发”

try-with-resource vs java.lang.IllegalStateException:提交响应后无法调用 sendError()

发送序列化的表单数据并接收带有表单和会话数据的 PHP Laravel 重定向