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。
在您的情况下,<p:dataTable paginator="true"..>
使用会话属性来跟踪当前页码等。
在呈现输出页面之前,请尝试确保您已经处于会话中。例如。通过让用户登录或其他方式。例如,在您的控制器中,执行FacesContext.getCurrentInstance().getExternalContext().getSession(true)
。这将在您呈现页面之前创建一个会话。
【讨论】:
我没有声明会话 bean。这是代码。之前用来正确渲染的页面。以上是关于PWC3999:提交响应后无法创建会话的主要内容,如果未能解决你的问题,请参考以下文章
如何摆脱警告:PWC4011:无法将请求字符编码设置为 UTF-8
jetty 8.x, 9.x无法加载jstl的PWC6188问题,jstlpwc6188
图像字节 [] 到 Grails 中的 response.outputStream 导致“响应提交后无法转发”
try-with-resource vs java.lang.IllegalStateException:提交响应后无法调用 sendError()