2012-08-09 103 views
1

我是JSF的新手,正在构建使用facelets创建的应用程序。
这里是我的模板
master.xhtml
JSF错误 - IllegalStateException:PWC3999:提交响应后无法创建会话

<body id="body"> 
<form id="frmmaster"> 
     <div id="pg-nav-bg"> 
      <div class="wrapper clear"> 
       <div class="footer clear"> 
        <div class="footerContent">Help Des</div> 
       </div> 
       <div id="pg-nav"> 
        <ul class="nav sf-js-enabled"> 
         <li class="page_item" id="liHomr"> 
          <a href="#" title="Home">Home</a> 
         </li> 
         <li class="page_item" id="liFreeSearch"> 
          <a href="#" title="Free Search" >Free Search</a> 
         </li> 
         <li class="page_item" id="liMasterSearch">  
          <a href="#" title="Search">Search</a> 
         </li> 
         <li class="page_item" id="liAdvanceSearch"> 
          <a href="#" title="Advanced Search">Advanced Search</a> 
         </li> 
         <li class="page_item" id="liCharts"> 
          <a href="#" title="Charts" >Charts</a> <!-- 
         </li> 
        </ul> 
       </div> 
      </div> 
     </div> 
     <div class="wrapper clear"> 
      <div class="Welcome "> 
       <div class="welcome"> 
        Welcome! &nbsp;<strong>Searcher</strong> 
        &nbsp; | &nbsp; 
        <strong > 
         [ <a title="Change Password" href="" style="color: #FFFFFF;">Change Password</a> ] 
         [ <h:commandLink id="lbSignOut" value="Sign Out" onclick="lbSignOut_Click" styleClass="color: #FFFFFF;"></h:commandLink> ] 
        </strong> 
       </div> 
       <br class="clear" /> 
       <div> 
        <label id="lblMessage"></label> 
       </div> 
      </div> 
     </div> 
     <div class="wrapper big" > 
      <div id="header" class="clear"> 
       <img src="../../images/logo.png" class="image" alt=""/> 
       <div class="logo"> 
        <div id="title" >M - 11</div> 
        <div id="version">V 0.8</div> 
        <div id="description">Helps in finding the right person</div> 
       </div> 
      </div> 
      <!-- Here I included facelet --> 
      <ui:include src="../SearchPages/MasterSearch.xhtml"/> 

     </div> 
    </form> 
</body> 

</html> 

现在以下文件是我在master.xhtml即这里

包括MasterSearch.xhtml

<ui:composition xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:ui="http://java.sun.com/jsf/facelets" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:f="http://java.sun.com/jsf/core"> 
<div id="sidebar"> 
      <ul> 
       <li class="widget"> 
        <table> 
        <h:form> 
         <tr><td>Service Number</td> 
          <td> 
          <h:inputText id="txtMasterServiceNumber" styleClass="text-box" value="#{masterSearch.serviceNumber}" requiredMessage="enter value"> 
          <f:validateRegex pattern="[A-Za-z0-9]{1,40}"/> 
          </h:inputText> 
          <h:message for="txtMasterServiceNumber" /> 

          </td> 
         </tr> 
         <tr> 
          <td>Rank</td> 
          <td><h:selectOneMenu id="cboMasterRank" value="#{masterSearch.rank}" styleClass="select-field"> 
              <f:selectItem itemLabel="--Please Select--" itemValue="medium" /> 
              <f:selectItem itemLabel="A" itemValue="medium" /> 
              <f:selectItem itemLabel="B" itemValue="basic" /> 
              <f:selectItem itemLabel="C" itemValue="premium" /> 
              </h:selectOneMenu></td> 
         </tr> 
         <tr> 
          <td>Full Name</td> 
          <td> 
          <h:inputText id="txtMasterFullName" styleClass="text-box" value="#{masterSearch.fullName}" validatorMessage="Please enter a valid name."> 
          <f:validateRegex pattern="^([A-Za-z])*$" /> 
          <h:message for="txtMasterFullName" styleClass="Error" /></h:inputText> 
          </td> 
         </tr> 
         <tr> 
          <td>CNIC Number</td> 
          <td><h:inputText id="txtMasterCNIC" value="#{masterSearch.CNICNumber}" styleClass="text-box"> 
          <f:validateRegex pattern="^([A-Za-z])*$" /> 
          <h:message for="txtMasterFullName" styleClass="Error" /> 
          </h:inputText> 
          </td> 
         </tr> 
         <tr> 
          <td>Phone No.</td> 
          <td><h:inputText id="txtMasterPhoneNo" value="#{masterSearch.phoneNumber}" styleClass="text-box"></h:inputText> 
          </td> 
         </tr> 
         <tr> 
          <td>Email Address</td> 
          <td><h:inputText id="txtMasterEmail" value="#{masterSearch.emailAddress}" styleClass="text-box"></h:inputText> 
          </td> 
         </tr> 
         <tr> 
          <td colspan="2" align="right"> 
          <h:commandButton id="btnMasterSearch" type="submit" value="Search" styleClass="submitButton" action="#{masterSearch.findPerson}"></h:commandButton> 
          </td> 
         </tr> 
         </h:form> 
        </table> 
       </li> 
      </ul> 
       <img src="../../images/loader.gif" alt="" style="vertical-align:middle;margin:2px;"/>Loading... 
     </div> 

    </div> 
    <script src="../../Scripts/searchexternal.js" type="text/javascript"></script> 
我的作文文件

MasterSearch.java哪个是豆类

public class MasterSearch { 

    long serviceNumber; 
    String rank; 
    String fullName; 
    String CNICNumber; 
    String phoneNumber; 
    String emailAddress; 

    public long getServiceNumber() { 
     return serviceNumber; 
    } 
    public void setServiceNumber(long serviceNumber) { 
     this.serviceNumber = serviceNumber; 
    } 
    public String getRank() { 
     return rank; 
    } 
    public void setRank(String rank) { 
     this.rank = rank; 
    } 
    public String getFullName() { 
     return fullName; 
    } 
    public void setFullName(String fullName) { 
     this.fullName = fullName; 
    } 
    public String getCNICNumber() { 
     return CNICNumber; 
    } 
    public void setCNICNumber(String cNICNumber) { 
     CNICNumber = cNICNumber; 
    } 
    public String getPhoneNumber() { 
     return phoneNumber; 
    } 
    public void setPhoneNumber(String phoneNumber) { 
     this.phoneNumber = phoneNumber; 
    } 
    public String getEmailAddress() { 
     return emailAddress; 
    } 
    public void setEmailAddress(String emailAddress) { 
     this.emailAddress = emailAddress; 
    } 

    public String findPerson(){ 

     return "personfound"; 

    } 

} 

faces-config.xml中

<?xml version="1.0" encoding="UTF-8"?> 

<faces-config 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd" 

    version="2.0"> 

    <application> 
     <el-resolver> 
      org.springframework.web.jsf.el.SpringBeanFacesELResolver 
     </el-resolver> 
    </application> 

<managed-bean> 
    <managed-bean-name>masterSearch</managed-bean-name> 
     <managed-bean-class> 
      MasterSearch 
     </managed-bean-class> 
    <managed-bean-scope>request</managed-bean-scope> 
</managed-bean> 

<managed-bean> 
    <managed-bean-name>masterResult</managed-bean-name> 
     <managed-bean-class> 
      com.delta.resultbeans.MasterSearchResult 
     </managed-bean-class> 
    <managed-bean-scope>request</managed-bean-scope> 
</managed-bean> 

<navigation-rule> 
    <description>Navigation from the MasterSearch</description> 
    <from-view-id>/WebPages/SearchPages/MasterSearch.xhtml</from-view-id> 
    <navigation-case> 
     <from-outcome>personfound</from-outcome> 
     <to-view-id>/WebPages/SearchPages/found.jsp</to-view-id> 
    </navigation-case> 
    <navigation-case> 
     <from-outcome>personnotfound</from-outcome> 
     <to-view-id>/notfound.jsp</to-view-id> 
    </navigation-case> 
</navigation-rule> 
</faces-config> 

现在,当我运行这段代码(实际上masterp.xhtml)它显示了完美的输出和负载accuratley但将在控制台即

SEVERE: Error Rendering View[/WebPages/MasterPage/master.xhtml] 
java.lang.IllegalStateException: PWC3999: Cannot create a session after the response has been committed 
    at org.apache.catalina.connector.Request.doGetSession(Request.java:2885) 
    at org.apache.catalina.connector.Request.getSession(Request.java:2582) 
    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 com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:121) 
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) 
    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:1542) 
    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:849) 
    at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:746) 
    at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1045) 
    at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:228) 
    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) 

INFO: Exception when handling error trying to reset the response. 
java.lang.IllegalStateException: PWC3999: Cannot create a session after the response has been committed 
    at org.apache.catalina.connector.Request.doGetSession(Request.java:2885) 
    at org.apache.catalina.connector.Request.getSession(Request.java:2582) 
    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 com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:121) 
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) 
    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:1542) 
    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:849) 
    at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:746) 
    at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1045) 
    at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:228) 
    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) 

WARNING: StandardWrapperValve[Faces Servlet]: PWC1406: Servlet.service() for servlet Faces Servlet threw exception 
java.lang.IllegalStateException: PWC3999: Cannot create a session after the response has been committed 
    at org.apache.catalina.connector.Request.doGetSession(Request.java:2885) 
    at org.apache.catalina.connector.Request.getSession(Request.java:2582) 
    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 com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:121) 
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) 
    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:1542) 
    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:849) 
    at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:746) 
    at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1045) 
    at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:228) 
    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) 

异常而且我认为由于这个原因,它没有提交我的按钮的动作

<h:commandButton id="btnMasterSearch" type="submit" value="Search" styleClass="submitButton" action="#{masterSearch.findPerson}">目前在MasterSearch.xhtml。我在SO上发现人们有这个问题b我无法找到并理解一个好的解决方案。
请帮忙谢谢

+0

我不明白你为什么混合使用纯HTML和Facelets。 – 2012-08-09 05:51:47

+0

用于设计处理 – khan 2012-08-09 05:53:12

+0

“响应提交后无法创建会话”看起来在页面响应完成后,代码中的某处您尝试创建会话。我会建议检查支持豆。 – kosa 2012-08-09 06:03:12

回答

10

这是Mojarra的一个已知的错误。它已被报告为问题22152277,自Mojarra 2.1.8以来已被修复。所以如果你升级到至少2.1.8,那么这个问题应该会消失。

这个问题的原因可以解释为:Mojarra试图尽可能推迟会话创建。该会话只应在确实需要的时刻创建。其中,需要编写JSF视图状态<h:form>时,通常发生在关闭</h:form>的呈现期间。然而,在关闭</h:form>出现 2KB的书面HTML的较大页面上,则创建会话为时已晚。要创建一个会话,服务器需要设置一个cookie。然而,要设置一个cookie,响应不应该被提交(cookie即需要进入响应头)。默认情况下,服务器配置为刷新每写入2KB的HTML响应。

如上所述,自Mojarra 2.1.8以来,这个问题已得到解决。您可以下载最新版本here

+0

thx @BalusC - 我是JSF的新手,所以我不明白,为什么这个mojarra问题出现在我的应用程序,因为我使用glassfish 3.1.2并且我没有为JSF添加任何jar,因为glassfish已经为此提供了支持。所以如果我不使用莫哈拉,那么它来了?并为了解决我下载2.1.11版本后应该做什么......我应该将javax.faces-2.1.11.jar包含在我的类路径中吗? – khan 2012-08-09 15:02:39

+1

JSF捆绑在Glassfish中。 Glassfish 3.1.2使用Mojarra 2.1.6。只需将'/ glassfish/modules'文件夹中的'javax.faces.jar'文件替换为新版本即可。 – BalusC 2012-08-09 15:03:34

+0

爱你的男人 - 你真棒:)由于该代码还没有提供给我,但我希望当我将尝试这样做会好:):* – khan 2012-08-09 15:05:11

相关问题