2010-11-04 32 views
9

JSP'de, bir istekte otomatik oluşturma oturumunu devre dışı bırakmak için kullanılan oturum numaralı bir öznitelik var.Jsf'de oturum oluşturma yok

<%@page contentType="text/html" pageEncoding="UTF-8" session="false" %> 

JSF2'de bunu yapmanın bir yolu var mı?

Teşekkürler

Neden? Çünkü bir uygulamada bir varsayılan sayfa olarak bir genel kayıt formu sayfası var. Bu çok basit bir formdur ve her zaman insanlar (veya robotlar, vb.) Ana sayfayı talep eden oturum oluşturulur. ManagedBean, RequestScope'dur, ancak JSF, ilk navegation isteğinde bir oturum oluşturur.

+0

@BalusC Söz konusu neden eklenmiştir. – angelcervera

cevap

7

Sadece (yani sadece istek veya uygulama fasulye kapsamlı kullanın) görünümü/oturum fasulye kapsamlı kullanmayın ve set devlet web.xml aşağıdaki bağlam parametresini ayarlayarak yerine server (varsayılan) client kaydetme.

<context-param> 
    <param-name>javax.faces.STATE_SAVING_METHOD</param-name> 
    <param-value>client</param-value> 
</context-param> 

Sonra MTU oturumu oluşturmaz ve gerektiğinde formda ismi javax.faces.ViewState ile gizli bir giriş alanında görünüm durumunu saklar.

Oturumları oluşturma ve yönetme maliyeti oldukça göz ardı edilebilir. Ayrıca, istemci tarafı görünüm durumu tasarrufu kullanılırken, görüntüleme durumunu ve ağ bant genişliğini serileştirme maliyetini (hala) karşılamanız gerekir.


Güncelleme Yorumlarınız göre:

@BalusC Evet, bu genel bir çözüm olabilir. Ancak bu yönteme yalnızca bu genel sayfada ihtiyacım var. Diğer sayfalarda sunucu tarafı durum tasarrufu yöntemini istiyorum.

Ah tamam. Maalesef, JSF/Facelets’in oturumu devre dışı bırakması ya da istek durumuna bağlı olarak durum durumunu kaydetmesi için herhangi bir yol göremiyorum. JSF <h:form> yerine düz bir HTML <form> kullanmayı düşünürüm, başka bir JSF sayfasına gönderir ve JSF sayfasıyla ilişkili olarak fasulye içinde @ManagedProperty'u kullanır. Örneğin. Aslında BalusC gelen cevap

@ManagedBean 
@RequestScoped 
public class Register { 

    @ManagedProperty(value="#{param.username}") 
    private String username; 

    @ManagedProperty(value="#{param.password}") 
    private String password; 

    @PostConstruct 
    public void init() { 
     // Do your thing here. 
     System.out.println("Submitted username/password: " + username + "/" + password); 
    } 

    // ... 
} 
2

ile

<form action="register.jsf" method="post"> 
    <input type="text" name="username" /> 
    <input type="password" name="password" /> 
    <input type="submit" /> 
</form> 

Mojarra 2.1.19/2.2.0 beri doğru değil. Bu konuda blogunu here'da okuyabilirsiniz. Şimdi tamamen yeterli sadece ayarlayın:

<f:view transient="true"> 
    Your regular content 
</f:view> 

As

belirtilen yazı söyleniyordu:

görünüm durumu oluşturuldu değildir ve henüz oluşturulmamış zaman böylece oturum da oluşturulmaz. [...] İlgili yönetilen fasülyeyi görüntüleme/oturum kapsamı yerine istek kapsamına almayı unutmayın, aksi takdirde "vatansız" kelimesinin anlamını yendiniz.

Ayrıca
 /* 
     * Make sure we have a session here if we are using server state 
     * saving. The WriteBehindStateWriter needs an active session when 
     * it writes out state to a server session. 
     * 
     * Note if you flag a view as transient then we won't acquire the 
     * session as you are stating it does not need one. 
     */ 
     if (isServerStateSaving() && !viewToRender.isTransient()) { 
      getSession(ctx); 
     }  

farkında olması bazı 3. taraf bileşenleri kütüphaneler, örneğin: com.sun.faces.application.view.FaceletViewHandlingStrategy sınıfta bulunan

Sonraki kod parçacığı ICEfaces veya diğer çerçeveler, ör. Apache Shiro, kendi amaçları için kendi başına oturum açabilirdi.

İlgili konular