Conversaciones de JSF? Cid - ¿Un desastre correcto cuando alguien marca la página?

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

  •  26-10-2019
  •  | 
  •  

Pregunta

Trabajando en JBoss AS7, utilizando el alcance de la conversación para administrar las interacciones del usuario dentro de una pestaña del navegador.

Observo que mis páginas obtienen parámetros de CID agregados. Esto es genial, ¡hasta que el usuario marque la página y luego intente volver a ella! El filtro de conversación da un mensaje de "no hay conversación".

¿Existe una mejor manera de administrar conversaciones? ¿Quizás una implementación o un interruptor para que use campos ocultos (con cuidado apropiado en AJAX)? ¡Alternativamente, tendré que comenzar a intentar interceptar la excepción de conversación o modificar el filtro!

Gracias - Richard

Más lejos:

Estoy interceptando el evento Beforerestoreview para otro propósito (manejo de inicio de sesión principalmente). Uno pensaría que esto funcionaría:

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

¡Pero no puedo obtener el contexto para preguntar si está activo! Simplemente lanzaré una captura de prueba por ahora.

¿Fue útil?

Solución

Ahora adoptamos un enfoque de dos puntas.

Un gerente de conversación bastante complejo detecta una mala identificación de conversación y toma las medidas apropiadas. Responde actualmente al evento After Restore View. Me gustaría moverlo antes, pero tengo problemas para obtener la ID de vista en esta etapa. He escrito un JSF a CDI Bridge para pasar los eventos a CDI. Los costureros harían lo mismo, pero demostraron que nos pesó demasiado pesado.

Para obtener una normalidad, el administrador de conversación se redirige a sí mismo sin el parámetro CID para hacer que se inicie una nueva conversación. Para una devolución de devolución, devuelve un error HTTP 410. La detección de la conversación muerta es la anterior. Podríamos usar una ID de conversación más aleatoria cuando creamos conversaciones para tratar de evitar la colisión si se reutiliza una ID.

El administrador de conversación también comenzará una conversación dependiendo de los metadatos que tenga sobre las páginas. (Todas las páginas en / formularios / requieren una conversación en nuestra aplicación). Utiliza la redirección cuando hace esto para asegurarse de que el parámetro CID esté en todas partes. Esto puede volverse innecesario si puedo resolver el problema de obtener la ID de formulario antes de la fase de restauración.

Utilizamos la API del historial del navegador para eliminar el CID de la ventana URL del navegador del usuario.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top