亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

添加<h:form>會導致java.lang.IllegalStateException:

添加<h:form>會導致java.lang.IllegalStateException:

慕慕森 2019-07-09 14:23:32
添加<h:form>會導致java.lang.IllegalStateException:無法在提交響應后創建會話在添加以下非常簡單的JSF 2頁面后,我將面臨以下異常<h:form>:java.lang.IllegalStateException: Cannot create a session after the response has been committed     at org.apache.catalina.connector.Request.doGetSession(Request.java:2758)     at org.apache.catalina.connector.Request.getSession(Request.java:2268)我在Tomcat 7.0.22和JDK 7上使用mojarra 2.1.3和PrimeFaces3.0M4。該頁是一個非常基本的數據表:<html xmlns="http://www.w3.org/1999/xhtml"     xmlns:h="http://java.sun.com/jsf/html"     xmlns:f="http://java.sun.com/jsf/core"     xmlns:p="http://primefaces.org/ui"><h:head></h:head><h:body>     <h:form>                 <p:dataTable var="car" value="#{tableBean.cars}">                  ......        </p:dataTable>     </h:form></h:body></html>頁面在瀏覽器上顯示正確,但在控制臺上我看到異常。如果我刪除<h:form>.這是如何造成的,我如何解決呢?
查看完整描述

3 回答

?
收到一只叮咚

TA貢獻1821條經驗 獲得超5個贊

這是一個已知的問題,你們的報告確實是這樣的。第2215期..當響應緩沖區溢出(由于大量內容)并且響應在創建會話之前提交時,就會發生這種情況。這是由于mojarra試圖盡可能推遲“不必要”會話的創建(這本身就是一件好事)。

在他們修好之前,有幾個解決辦法:

  1. 創建一個Filter這確實HttpServletRequest#getSession()以前FilterChain#doFilter()..優點:無需更改JSF配置/代碼。缺點:當您希望避免不必要的會話創建時,您自己也是如此。

  2. 打電話ExternalContext#getSession()帶著true在bean的(POST)構造函數或preRenderView聽眾。優勢:事實上,沒什么。缺點:太無趣了。

  3. 添加名稱為com.sun.faces.writeStateAtFormEnd和價值falseweb.xml..優點:相對于#1和#2,將真正避免不必要的會話創建。</h:form>到達了。如果您的表單不是非常大,那么影響應該是最小的。但是,如果您的<h:form>在視野中起步相對較晚。這可能與#4相結合。

  4. 添加名稱為javax.faces.FACELETS_BUFFER_SIZE以及Facelets響應緩沖區大小的值,以字節為單位(例如,65535),以便整個HTML輸出或至少<h:form>(參見#3)適合響應緩沖區。有利/不利,見第3條。

  5. 添加名稱為javax.faces.STATE_SAVING_METHOD和價值clientweb.xml..優點:除非您有會話作用域bean,否則不會創建會話。它也立即解決了潛在的問題。ViewExpiredException案子。缺點:增加了網絡帶寬的使用。如果您使用的是部分狀態保存,那么影響應該是最小的。

為什么當你移除的時候這個問題就消失了?<h:form>,這是因為不需要創建任何會話來存儲視圖狀態。


更新*這是根據復本第2277期自Mojarra 2.1.8以來就固定了。所以,你也可以升級到至少那個版本。


查看完整回答
反對 回復 2019-07-09
?
藍山帝景

TA貢獻1843條經驗 獲得超7個贊

隨著昨天發布的javax.Faces新版本2.1.21,這個問題似乎已經消失了。宣布新版本:

<dependency>
    <groupId>org.glassfish</groupId>
    <artifactId>javax.faces</artifactId>
    <version>2.1.21</version></dependency>

并替換Glassfish模塊文件夾中的javax.faces.jar,將javax.faces.jar替換為新版本2.1.21。


查看完整回答
反對 回復 2019-07-09
?
慕勒3428872

TA貢獻1848條經驗 獲得超6個贊

在我的例子中(myFaces-2.2.8&Tomcat 8.0.23),問題是在welcome-fileweb.xml..調試時,Tomcat按預期創建了404,但不知怎的,我的Faces隨后嘗試訪問會話,這導致了java.lang.IllegalStateException: Cannot create a session after the response has been committed..中使用有效頁。welcome-fileweb.xml幫我解決了這個問題。


查看完整回答
反對 回復 2019-07-09
  • 3 回答
  • 0 關注
  • 506 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號