Pregunta

Mojarra Aplicación de JSF 2 tiene las params contexto siguiente:

  • com.sun.faces.numberOfViewsInSession (por defecto es 15)
  • com.sun.faces.numberOfLogicalViews (por defecto es 15)

¿Cuál es la diferencia entre ellos? La documentación no habla mucho acerca de estos. Mi aplicación estaba teniendo problemas con ViewExpiredException para algunas páginas, pero después de que sacaron estos valores para un (mucho) mayor valor, que dejó de tener problemas.

Mi aplicación es una forma pesada, aplicación ajax habilitado financiera (algunas pantallas tienen más de 50 entradas, con la opción de añadir mucho más datos / entradas a través de AJAX).

lo que puede ser la causa de este comportamiento? Yo entiendo que el primer parámetro define el número de "páginas" que se mantienen en la sesión, que pueden ser útiles para el botón de retroceso, pero mis casos de uso que desencadenan la ViewExpiredException no utilice el botón de retroceso. ¿Qué hace el segundo parámetro se refiere? Si me quedo en la misma pantalla, pero seguir añadiendo una gran cantidad de datos a través de AJAX, hace esta causa la necesidad de un mayor número de puntos de vista lógicos de la página?

¿Fue útil?

Solución

En primer lugar, la aplicación Mojarra cambió sin querer el significado de esos parámetros de contexto. Así que si usted tiene la impresión de que la descripción es exactamente al revés de lo que el nombre del parámetro contexto literal implica, entonces esto es cierto.


com.sun.faces.numberOfLogicalViews

Esto se consigue básicamente basa petición. Cada petición GET crea una nueva vista en la sesión.

Para experimentar con ella, se establece en un valor de 3, se inicia una nueva sesión del navegador y abiertos 4 pestañas del navegador diferentes (independientemente de la URL; puede ser el mismo, puede ser diferente) en secuencia y luego volver a la primera ficha y enviar el formulario de allí. Obtendrá un ViewExpiredException, ya que este punto de vista ha sido empujado hacia fuera de la LRU (Least Recently Used) del mapa para vistas en sesión. Esto no ocurrirá si abrió máximo 3 fichas.

Con el valor por defecto de 15, este es un problema del mundo real rara. Si su aplicación Web está diseñado realmente para ser utilizado de esta manera (por ejemplo, un sitio / social de la comunidad, que invita a estar abiertos en varias pestañas, como foro de discusión o Q & A), entonces es posible considerar el uso de estado del lado del cliente ahorrar en lugar de aumentar el valor por defecto . Con el ahorro de estado del lado del cliente, nunca se enfrentará a esta excepción. Una alternativa sería utilizar OmniFaces <o:enableRestorableView> en combinación una consulta de ámbito de frijol y parámetros de la petición, o una vista bean restringidos al que cheques en (post) constructo si sus propias necesidades de estado para ser restaurado. De nuevo otra alternativa es ir con <f:view transient="true"> , de esta manera los puntos de vista no se guardan más, pero no se puede utilizar granos de vista de ámbito más.

Los MyFaces equivalentes es org.apache.myfaces.NUMBER_OF_VIEWS_IN_SESSION que por defecto es 20.


com.sun.faces.numberOfViewsInSession

Esto es básicamente sincrónico (no de Ajax) solicitud POST basada. Cada solicitud POST sincrónica crea un nuevo punto de vista lógico. Todos ellos se almacenan en la base de un punto de vista físico, como así Map<PhysicalView, Map<LogicalView, ViewState>>. Así, con un máximo de 15 puntos de vista físicos y lógicos máximo de 15 puntos de vista, se puede tener en teoría 15 * 15 = 225 visitas en sesión.

Para experimentar con ella, se establece en un valor de 3, abra una vista con una forma sincrónica, lo presentará 4 veces y luego presione el botón atrás del navegador 4 veces y luego envíe el formulario de nuevo. Obtendrá un ViewExpiredException, ya que este punto de vista ha sido empujado hacia fuera de la LRU (Least Recently Used) del mapa para vistas lógicas. Esto no ocurrirá si vuelve máximo 3 veces y volver a enviarlo.

Tenga en cuenta que somete ajax reutilizar el mismo punto de vista lógico (se puede confirmar por ver exactamente el mismo valor javax.faces.ViewState de ser devuelto en las devoluciones de datos Ajax). Hay apoyo para la espalda sin botón del navegador de todos modos. el botón atrás del navegador sólo le trae de vuelta a la petición síncrona anterior, sería, por tanto, no tiene ningún sentido para almacenar todas esas devoluciones de datos como ajax vistas lógicas en sesión.

Con el valor por defecto de 15 y la tendencia actual de las formas ajax de sólo caché y personas con discapacidad en las páginas dinámicas, esto es un problema del mundo real muy raro. formas diseñadas adecuadamente no deben invitar a pulsar el botón atrás del navegador. En cambio, deben presentar el éxito redirección a la vista de destino y en caso de fallo simplemente volver a mostrar la misma forma con los errores de validación. Véase, por consejos también ¿Cómo navegar en JSF? Como hacer URL reflejan página actual (y no uno anterior) . Además, la memoria caché es más a menudo deshabilita en las páginas dinámicas, por lo que el botón de retroceso, básicamente, le daría una nueva vista posterior. Véase también Evitar el botón de retroceso en la aplicación web JSF . con seguridad el valor a 1.

MyFaces originalmente no tenían equivalente para esto, y se contaron esto como una vista físico en sesión también. En la versión 2.0.6, org.apache.myfaces.NUMBER_OF_SEQUENTIAL_VIEWS_IN_SESSION se introdujo, con un parecido propósito, aunque con una aplicación diferente y desactivada de forma predeterminada.


Ver también:

Otros consejos

Sólo encontraron esta en la web: http: // oss .org.cn / ossdocs / java / ee / javaeetutorial5 / doc / JSFConfigure11.html

Esto podría ser útil:

  

vistas lógicas son subvistas de una vista de nivel superior. Por ejemplo, si usted tiene una página que incluye varios fotogramas a continuación, cada cuadro es una vista lógico.   Si usted tiene una aplicación sencilla el valor por defecto de 15 o 15 puntos de vista vistas lógicas podría ser demasiado grande. En este caso, se debe considerar la reducción del número permitido de vistas y vistas lógicas a la memoria conserva. Por el contrario, una aplicación más compleja podría requerir más de 15 puntos de vista o vistas lógicas que se guardan en una sesión.

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