2013-01-06 25 views
6

Ben bu tür bir JSF Fasulye yapıya sahiptir:SessionScope'un ViewScoped Bean'in YönetilenYönetimi - Geçici?

@ManagedBean 
@ViewScoped 
public class ViewBeany implements Serializable { 

.... 
    @ManagedProperty(value='#{sessionBeany}) 
    transient private SessionBeany sessionBeany; 
... 

    public getSessionBeany() { ... }; 
    public setSessionBeany(SessionBeany sessionBeany) { ... }; 

} 

transient nedeni oturumu fasulye olmayan bazı Serializable üyesi bulunan SERIALIZABLE yapılamaz olmasıdır.

Bu işe yarar mı?
Değilse, SesionBeany seri hale getirilememe, ancak görünüm kapsamlı bir fasulye altında yönetilen bir özellik olarak tutmak zorunda kalmama sorununu nasıl çözebilirim?

Teşekkürler!

+0

, ayrıca sadece server' 'için' STATE_SAVING_MODE' ayarlamak ve tamamen müşteriye – kolossus

cevap

12

Bu çalışmaz. Görünüm kapsamındaki fasulye serileştirilirse, tüm transient alanları atlanır. JSF, serileştirme işleminden sonra yönetilen mülkleri yeniden ele almaz, bu nedenle, yalnızca NPE'lere neden olacak bir oturum kapsamı olmayan fasulye özelliği olmadan bir görünüm kapsamındaki fasulye ile sonuçlanırsınız.

Bu özel kurguda, en iyi bahsinizi aliciyaya tembel yükleme yapmak ve doğrudan alan erişimi yerine alıcı fasulyesi tarafından getiri almaktır. Bunu kısıtlı değilseniz

private transient SessionBeany sessionBeany; 

public SessionBeany getSessionBeany() { // Method can be private. 
    if (sessionBeany == null) { 
     FacesContext context = FacesContext.getCurrentInstance(); 
     sessionBeany = context.getApplication().evaluateExpressionGet(context, "#{sessionBeany}", SessionBeany.class); 
    } 

    return sessionBeany; 
} 
+0

sayesinde görünümünüzü seri zorunda önlemek olabilir. JSF'nin bu sorun için 'aerodinamik' bir çözümü olmadığına şaşıyorum, çünkü bu nadir değil. – Ben

+2

Durum bilgisi olan bir EJB'nin olmaması gerekip gerekmediğini merak ettim. EJB'ler serileştirilebilir proxy'ler olarak enjekte edilir, bu yüzden serileştirme konusunda endişelenmenize gerek kalmaz. – BalusC