JSF -Gespräche? CID - Ein richtiges Durcheinander, wenn jemand die Seite brocken?

StackOverflow https://stackoverflow.com/questions/7817936

  •  26-10-2019
  •  | 
  •  

Frage

Arbeiten in JBoss AS7 und verwenden Sie den Konversationsbereich, um die Interaktionen des Benutzers auf einem Browser -Registerkarte zu verwalten.

Ich stelle fest, dass meine Seiten CID -Parameter angehängt werden. Dies ist großartig - bis das Benutzer die Seite books markiert und dann versucht, dorthin zurückzukehren! Der Gesprächsfilter gibt eine "keine solche Konversation" -Meldung.

Gibt es eine bessere Möglichkeit, Gespräche zu führen? Vielleicht eine Implementierung oder ein Switch, um versteckte Felder zu verwenden (mit angemessener Sorgfalt in Ajax)? Alternativ muss ich versuchen, die Konversationsausnahme abzufangen oder den Filter zu ändern!

Danke - Richard

Des Weiteren:

Ich fasse das Ereignis von BeerEnestoreview für einen anderen Zweck ab (hauptsächlich Anmeldeberechtigung). Sie würden denken, das würde funktionieren:

/**
 * @return true if there is no valid Conversation context.
 */
private boolean conversationNotActive()
{
    Context conversationContext = m_beanManager.getContext(ConversationScoped.class);
    return !conversationContext.isActive();
}

Aber ich kann den Kontext nicht fragen, ob es aktiv ist! Werde vorerst nur einen Versuch einwerfen.

War es hilfreich?

Lösung

Wir verfolgen jetzt einen zweigekrönten Ansatz.

Ein recht komplexer Gesprächsleiter erkennt einen schlechten Gesprächs -ID und ergriffen geeignete Maßnahmen. Derzeit reagiert es auf das After -Wiederherstellungsereignis. Ich würde es gerne früher bewegen, habe aber Probleme, die Sicht -ID in dieser Phase abzuleiten. Ich habe eine JSF an CDI Bridge geschrieben, um die Ereignisse an CDI zu übergeben. Seamfaces würden dasselbe tun, sich aber für uns als zu schweres Gewicht erwiesen.

Für einen Normalen leitet der Konversationsmanager ohne den CID -Parameter auf sich selbst um, um ein neues Gespräch zu führen. Für einen Postback gibt es einen HTTP 410 -Fehler zurück. Die Erkennung von toten Gesprächen ist wie oben. Wir könnten eine zufälligere Konversations -ID verwenden, wenn wir Gespräche erstellen, um zu versuchen, Kollision zu verhindern, wenn eine ID wiederverwendet wird.

Der Gesprächsleiter wird auch ein Gespräch starten, je nach Metadaten, die er über die Seiten hält. (Alle Seiten unter / forms / erfordern ein Gespräch in unserer Bewerbung). Es verwendet eine Umleitung, wenn dies der Fall ist, um sicherzustellen, dass der CID -Parameter überall dort ist, wo er sein muss. Dies kann unnötig werden, wenn ich das Problem des Erhaltens der Form -ID vor der Wiederherstellungsphase lösen kann.

Wir verwenden die Browser -Historie -API, um das CID aus dem Browser -URL -Fenster des Benutzers zu entfernen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top