? JSF Conversazioni cid - un disastro proprio quando i segnalibri qualcuno la pagina?

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

  •  26-10-2019
  •  | 
  •  

Domanda

Lavorare in JBoss AS7, utilizzando Conversazione Ambito di applicazione per gestire le interazioni dell'utente all'interno di una scheda del browser.

Ho notato che le mie pagine ottengono? Parametri CID annesse. Questo è grande - fino a quando l'utente segnalibri pagina quindi cerca di tornare ad essa! Il filtro Conversazione dà un "No tale conversazione" messaggio.

C'è un modo migliore di gestire le conversazioni? Forse un'implementazione o di un interruttore per farlo utilizzare i campi nascosti (con cure appropriate in AJAX)? In alternativa dovrò iniziare a provare a intercettare l'eccezione conversazione o modificare il filtro!

Grazie - Richard

Ulteriori:

Sono intercettare l'evento BeforeRestoreView per altri scopi (login movimentazione principalmente). Si potrebbe pensare che questo dovrebbe funzionare:

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

Ma non riesco a ottenere il contesto per chiedere se se è attiva! Sarà solo gettare un Try-catch in per il momento.

È stato utile?

Soluzione

Ora prendere un duplice approccio.

Un piuttosto complessa direttore di conversazione rileva un cattivo conversazione Id e prende le misure appropriate. Essa risponde attualmente alla manifestazione dopo il ripristino View. Mi piacerebbe spostare in precedenza, ma sto avendo problemi derivanti l'ID vista in questa fase. Ho scritto un JSF al ponte di CDI a passare gli eventi a CDI. SeamFaces farebbero lo stesso, ma rivelata troppo pesante per noi.

Per un GET normale i reindirizzamenti Conversazione Gestore per sé, senza il parametro cid al fine di provocare una nuova conversazione da avviare. Per un postback restituisce un errore HTTP 410. La rilevazione della conversazione morti è come sopra. Potremmo usare un ID di conversazione più casuale quando creiamo le conversazioni per cercare di evitare di collisione se un ID viene riutilizzato.

La conversazione Manager anche iniziare una conversazione a seconda metadati che detiene sulle pagine. (Tutte le pagine sotto / forma / richiedono una conversazione nella nostra applicazione). Esso utilizza reindirizzamento quando si fa questo per garantire che il parametro CID è ovunque ha bisogno di essere. Questo può diventare inutile se riesco a risolvere il problema di ottenere l'ID del modulo prima fase RestoreView.

Usiamo l'API cronologia del browser per rimuovere il cid dalla finestra di URL del browser dell'utente.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top