我正在编写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更多
任何人都可以帮我解决这个并给我原因吗?
非常感谢答案 0 :(得分:3)
嗯,好像你的一个标签试图设置会话属性,而你还没有会话。
要设置会话属性,应创建会话,并且会话ID应位于HTTP响应标头中的cookie中。但由于您已经在渲染页面,因此HTTP标头已经发送到客户端,因此您无法发送会话cookie。
在您的情况下,<p:dataTable paginator="true"..>
使用会话属性来跟踪当前页码等。
在渲染输出页面之前,请确保您已在会话中。例如。通过让用户登录或其他东西。例如,在您的控制器中,执行FacesContext.getCurrentInstance().getExternalContext().getSession(true)
。这将在您呈现页面之前创建一个会话。