2012-08-09 108 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

相關問題