SORU
9 Kasım 2011, ÇARŞAMBA


Ekleme <h:form> java neden olur.lang.İllegalStateException: Cannot yanıt işlendi sonra bir oturum oluşturmak

<h:form> ekledikten sonra çok basit AKSARAY 2 sayfasında aşağıdaki özel durum ile karşı karşıyayım:

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)

2.1.3 ve PrimeFaces3 mojarra bağlamda kullanıyorum.0M4, Tomcat 7.0.22 ve FIRSATLAR 7.

Bu sayfa çok temel bir veri tablosu

<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>

Sayfa doğru tarayıcıda gösterir, ama konsolda durum görüyorum. Durum I <h:form> kaldırırsanız yok.

Nasıl bu neden olur ve nasıl çözebilirim?

CEVAP
9 Kasım 2011, ÇARŞAMBA


Bu bilinen bir sorundur ve issue 2215 senin gerçekten bildirilmiştir. Bu yanıt arabelleği taştı ne zaman ortaya çıkar (geniş içeriği nedeniyle) ve yanıt oturumu oluşturulmuş önce kaydedilmiş. Bu mojarra bağlamda biraz fazla hevesli girişimleri ertelemek için neden "gereksiz" oturum oluşturma mümkün olduğunca kendi başına İyi bir Şey olsa da).

Onlar onarana kadar, birkaç geçici çözüm vardır:

  1. FilterChain#doFilter() önce HttpServletRequest#getSession() yok Filter oluşturun. Avantajı: değiştirmeye gerek AKSARAY yapılandırma/kodu. Gereksiz oturum oluşturma önlemek için kendiniz de istediğiniz zaman. dezavantajı:

  2. Fasulye true (post)kurucu ile ExternalContext#getSession() preRenderView dinleyici arayın. Avantajı: aslında, hiçbir şey. Dezavantajı: çok hacky.

  3. web.xml 13 com.sun.faces.writeStateAtFormEnd ve değer adı ile bir bağlam parametresi ekleyin. Avantajı: yaratılış 1 ve 2 numaralı aksine gerçekten önlenmiş olur gereksiz oturumu. Dezavantajı: yanıt şimdi </h:form> ulaşılana kadar tam bellek tamponlu olacak. Eğer formlar değil, çok büyük, etkisi ancak en az olmalıdır. Ancak hala <h:form> başlar nispeten geç görünümünde başarısız olur. Bu #4 ile birleştirilebilir.

  4. Ekleyin bir bağlam parametre adı javax.faces.FACELETS_BUFFER_SIZE ve bir değer Facelets yanıtı, arabellek boyutu, bayt (örneğin 65535 64 KB) böylece tüm HTML çıktısı ya da en azından <h:form> (bkz #3) uygun yanıtı arabellek. Avantaj dezavantaj, #3/.

  5. web.xml client javax.faces.STATE_SAVING_METHOD ve değer adı ile bir bağlam parametresi ekleyin. Avantajı: oturum oturum kapsamlı fasulye yoksa hiç oluşturulmaz. Ayrıca hemen ViewExpiredException potansiyel davaları çözer. Dezavantajı: yüksek ağ bant genişliği kullanımı. Eğer kısmi koruma durumuna kullanıyorsanız, ancak etkisi çok az olmalıdır.

Sorun <h:form>, Kaldır kayboluyor neden bu oturumu görünüm durumunu saklamak için oluşturulmalıdır çünkü.


Güncellemebu issue 2277 yinelenen başına mojarra bağlamda 2.1.8 beri sabit olmuştur. Bu yüzden de sadece en azından bu sürüme yükseltebilirsiniz.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Amena

    Amena

    15 Kasım 2006
  • The Verge

    The Verge

    8 AĞUSTOS 2006
  • Wild Academy

    Wild Academy

    8 Aralık 2009