Pregunta

Estoy evaluando la posibilidad de utilizar JSF en un sitio web de alto tráfico. Me han dicho que en JSF 2.0 el árbol de componentes no se almacena en la sesión, y que sólo los deltas se almacenan una vez que se modifica el árbol de componentes.

Esta es la página que estoy viendo:

<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml"
   xmlns:h="http://java.sun.com/jsf/html">
    <body>
        <h:form>
            hello, world
        </h:form>
    </body>
</html>

Cada vez que veo esta página, casi 1K se asigna a la sesión. Si quito la etiqueta <form>, nada se almacena en la sesión.

Cualquier idea de por qué el árbol de componentes se almacena en la sesión? Me gustaría pensar que esto se calcula sobre la solicitud de devolución de datos.

¿Fue útil?

Solución

ahorro parcial Estado no significa que el Estado no se guardará en la sesión. Sólo significa que un parte del estado árbol de componentes se guardará en lugar de la toda Estado de árbol de componentes. La idea clave de ahorro estado parcial es que no se guardará el estado de los componentes que no sería cambiado por el lado del cliente en la solicitud posterior. En su lugar, se obtiene por volver a ejecutar la vista en el lado del servidor durante la restauración de vista. sólo se almacena el estado componente que es sensible a los cambios por parte del cliente (formularios, los insumos, los botones, etc). El 1K que se ve en la sesión es el propio estado parcial.

Para probar usted mismo, cambiar el estado de encendido y apagado por la siguiente context-param en web.xml:

<context-param>
    <param-name>javax.faces.PARTIAL_STATE_SAVING</param-name>
    <param-value>false</param-value>
</context-param>

Se verá que el tamaño aumenta cuando el ajuste es false, lo que significa que el toda árbol de componentes se ha salvado en su lugar.

Se almacena en la sesión debido a que es la única que proporciona la API Servlet, que tiene un alcance mayor que el ámbito de la petición. El almacenamiento en la solicitud de alcance tendría ningún valor, ya que no estaría disponible ya en la solicitud posterior. La API de servlet no tiene noción del alcance vista como la que tiene JSF (que se encuentra bajo las cubiertas indirectamente utilizando el ámbito de sesión por cierto, básicamente, el estado de vista es el estado del árbol de componentes).

de hecho no lo ve más cuando se quita la forma ya que no hay realmente nada que pudiera alterar el cliente (es decir, no habría devolución de datos). No tendría sentido para guardar el estado a continuación. Además, no habría nada para pasar la llave del estado guardado como un campo de entrada oculta (con el nombre javax.faces.ViewState).

Ver también:

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