2013-01-06 10 views
6

Mam JSF Fasola struktury tego typu:ManagedProperty z SessionScope wewnątrz ViewScoped Bean - Transient?

@ManagedBean 
@ViewScoped 
public class ViewBeany implements Serializable { 

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

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

} 

Powodem jest to, że transient fasola sesja ma jakieś non-Serializable członków i nie może być wykonane do serializacji.

Czy to zadziała?
Jeśli nie, w jaki sposób mogę rozwiązać problem polegający na tym, że nie można serializować SesionBeany, ale trzeba go zachować jako właściwość zarządzaną w ramach komponentu bean z zakresem widoku?

Dzięki!

+0

Jeśli nie jesteś tak ograniczony, można też po prostu ustawić 'STATE_SAVING_MODE' do' server' i uniknąć serializacji widoku klientowi całkowicie – kolossus

Odpowiedz

12

To nie zadziała. Jeśli zasób z zakresem widoku jest serializowany, wszystkie pola transient są pomijane. JSF nie powoduje ponownego wprowadzenia właściwości zarządzanych po deserializacji, więc kończy się ziarnem o ograniczonym zasięgu, bez właściwości bean o ograniczeniu sesji, która spowoduje tylko NPE.

W tym konkretnym konstrukcie najlepiej jest wprowadzić leniwy ładunek w pobierającym i uzyskać komponent sesji przez getter zamiast bezpośredniego dostępu do pola.

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

Dzięki. Jestem zaskoczony, że JSF nie ma "usprawnionego" rozwiązania tego problemu, ponieważ przypuszczam, że nie jest to rzadkie. – Ben

+2

Już się zastanawiałem, czy to nie był stanowy EJB. EJB są wstrzykiwane jako przekształcalne serwery proxy, więc nie musisz martwić się serializacją. – BalusC

Powiązane problemy