? JSF Conversations cid - un désordre à droite quand quelqu'un signets la page?

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

  •  26-10-2019
  •  | 
  •  

Question

Travailler dans JBoss AS 7, en utilisant Portée de conversation pour gérer les interactions de l'utilisateur dans un onglet du navigateur.

Je note que mes pages sont? Cid paramètres annexés. Ceci est grande - jusqu'à ce que l'utilisateur signets la page essaie alors de revenir! Le filtre de conversation donne un message "No such conversation".

Y at-il une meilleure façon de gérer les conversations? Peut-être une mise en œuvre ou d'un commutateur pour en faire utiliser des champs cachés (avec des soins appropriés en AJAX)? Sinon, je vais devoir commencer à essayer d'intercepter l'exception de conversation ou modifier le filtre!

Merci - Richard

En outre:

J'intercepter l'événement BeforeRestoreView à d'autres fins (login principalement la manipulation). On pourrait penser que cela fonctionnerait:

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

Mais je ne peux pas le contexte de demander si, s'il est actif! Est-ce que tout simplement jeter un try-catch dans pour l'instant.

Était-ce utile?

La solution

Nous prenons maintenant une approche à deux volets.

Un gestionnaire de conversation assez complexe détecte une mauvaise ID de conversation et prend les mesures appropriées. Elle répond actuellement à la restauration après Voir l'événement. Je voudrais déplacer plus tôt, mais ayant des problèmes découlant suis l'ID de vue à ce stade. J'ai écrit un JSF à pont CDI pour passer les événements à CDI. SeamFaces feraient la même chose, mais avéré trop lourd pour nous.

Pour un EEG normal, les réacheminements Conversation Manager à l'auto sans le paramètre cid afin de provoquer une nouvelle conversation à démarrer. Pour un postback il renvoie une erreur HTTP 410. La détection de la conversation est morte comme ci-dessus. Nous pourrions utiliser une conversation plus aléatoire Id quand nous créons des conversations pour tenter d'éviter une collision si un ID est réutilisée.

Le gestionnaire de conversation va également commencer une conversation en fonction des métadonnées qu'elle détient sur les pages. (Toutes les pages sous / formes / ont besoin d'une conversation dans notre application). Il utilise redirect quand il fait cela pour faire en sorte que le paramètre CID est partout où il doit être. Cela peut devenir inutile si je peux résoudre le problème d'obtenir l'ID de forme avant la phase RestoreView.

Nous utilisons l'API historique du navigateur pour supprimer le cid de la fenêtre d'URL du navigateur de l'utilisateur.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top