Ist der Konversationsbereich ein geeigneter Ersatz für den Ansichtsbereich?

8

In JSF 2.0 ist der offensichtlichste Anwendungsfall für den Ansichtsbereich eine einzelne Seite mit möglicherweise mehreren AJAX-Postbacks. Die Verwendung von CDI anstelle von JSF-verwalteten Beans lässt uns ohne den Ansichtsbereich, sodass wir entweder eigene implementieren, eine (möglicherweise fehlerbehaftete) Implementierung von Drittanbietern verwenden oder den Konversationsbereich verwenden.

Meine Frage: Ist der Konversationsbereich ein würdiger Ersatz für den Sichtbereich in der typischen AJAX-Situation? Wie der Ansichtsbereich erlaubt es mehrere Instanzen pro Sitzung? Was sind die Fallstricke?

Mir ist einer der Fallstricke bewusst, dass der Konversationsbereich nicht automatisch gelöscht wird, wenn der Benutzer von der Seite weg navigiert, sondern stattdessen nach einer Zeitüberschreitung gelöscht wird. Aber ich bin mir nicht sicher, was passiert, wenn der Benutzer zurück auf diese Seite navigiert, bevor die Konversation abgelaufen ist.

AKTUALISIEREN

Der Konversationsbereich unterstützt tatsächlich mehrere Instanzen pro Sitzung. Dieses Buch gibt so viel an und ich konnte dies anhand des Codes von ch bestätigen. 2.

    
Steve Taylor 01.01.2012, 12:48
quelle

1 Antwort

4

In% @ConversationScoped CDI-Beans müssen Sie das folgende Feld haben:

%Vor%

Wenn Sie mit der Konversation beginnen möchten, müssen Sie prüfen, ob die Bean in transient state ist. Andernfalls wird IllegalStateException ausgelöst. Es wäre etwa so:

%Vor%

Dadurch befindet sich Ihre Bean im long-running -Zustand. Wenn der Benutzer also von der Seite weg navigiert und später zurück navigiert, können Sie immer überprüfen, ob seine Konversation abgelaufen ist oder nicht und ihn auf die Seite bringen, von der er gegangen ist.

Außerdem habe ich @ViewScoped ManagedBean zusammen mit CDI-Bean für eine Weile benutzt. Sie können weiterhin @Inject verwenden, um eine CDI-Bean in ein MangedBean zu injizieren. Ich glaube nicht, dass du das anders machen kannst. Wie auch immer, ich habe keine Ahnung, ob das später etwas Schlimmes verursachen würde. Bis jetzt habe ich jedoch noch nie Probleme gefunden. Wenn Sie @ViewScoped wirklich verwenden möchten, können Sie Folgendes versuchen: P.

UPDATE:

  

Ist der Konversationsbereich ein würdiger Ersatz für den Ansichtsbereich in der typischen AJAX-Situation?

Ich glaube nicht, dass @ConversationScoped jemals @ViewScoped ersetzen kann.

  

Wie erlaubt der Ansichtsbereich mehrere Instanzen pro Sitzung?

Nein, Sie können nicht mehrere Instanzen pro Sitzung haben. Wie bereits erwähnt, wenn Sie eine neue Conversation starten, während sich die alte Conversation noch in long-running state befindet, erhalten Sie IllegalStateException .

  

Was sind die Fallstricke?

Nun, einer der Hauptvorteile von @ViewScoped über @RequestScoped besteht darin, dass Sie die Daten nicht jedes Mal erneut initiieren müssen, wenn der Benutzer das Formular an dieselbe Ansicht sendet. Mit @ConversationScoped wird dieser Vorteil jedoch zu oft genutzt. Obwohl dieses Problem nicht so gravierend ist wie bei Verwendung von @SessionScoped , müssen Sie die initiierten Daten weiterhin speichern, solange die @ConversationScoped -Bohne lebt. Je länger die Konversation, desto mehr Daten müssen gespeichert werden.

    
Mr.J4mes 01.01.2012 13:16
quelle

Tags und Links