java jsf richfaces myfaces

java - ¿Qué es viewstate en JSF y cómo se usa?



richfaces myfaces (2)

La pregunta es: ¿cómo se usa este valor? ¿Se utiliza para validar los valores enviados al enviar, para garantizar que la misma solicitud no se envíe dos veces?

La razón original por la que viewstate existe es porque HTTP es sin estado. El estado de los componentes entre las solicitudes debe mantenerse de una forma u otra. O almacena el estado en la memoria en el servidor y lo vincula a la sesión, o lo serializa / deserializa en la solicitud / respuesta cada vez.

AFAIK, viewstate no se utiliza para detectar el envío doble, pero podría hacerlo si adjunta una marca de tiempo o algo similar.

ViewState también se puede encriptar para asegurarse de que el cliente no lo modifique.

Además, ¿cómo se calcula? Me doy cuenta de que las caras enriquecidas se pueden calcular de forma diferente a mis caras, pero una idea sería agradable.

Cada componente es responsable de saveState su estado con saveState y restoreState (consulte este tutorial ). Así que diferentes conjuntos de componentes dan como resultado un estado de vista diferente. De forma similar, diferentes implementaciones JSF pueden dar como resultado un estado de vista diferente.

En JSF, hay un viewstate asociado con cada página, que se pasa de un lado a otro con los envíos, etc.

Sé que viewstate se calcula utilizando los estados de los diversos controles en la página, y que puede almacenarlo en el lado del cliente o del servidor.

La pregunta es: ¿cómo se usa este valor? ¿Se utiliza para validar los valores enviados al enviar, para garantizar que la misma solicitud no se envíe dos veces?

Además, ¿cómo se calcula? Me doy cuenta de que las caras enriquecidas se pueden calcular de forma diferente a mis caras, pero una idea sería agradable.

Gracias.


Si está familiarizado con JavaScript, puede pensar en un árbol de componentes JSF un poco como un DOM HTML donde la página HTML define el estado inicial pero puede modificarlo en tiempo de ejecución.

La tecnología de visualización (generalmente JSP o Facelets) define el estado inicial, pero luego puede manipularse programáticamente. Por ejemplo, puede agregar un component o establecer una property . Para que esto funcione correctamente, el estado de la vista debe persistir entre las solicitudes.

El estado de vista se divide en dos partes. El primero define la estructura del árbol de componentes:

UIView - UIForm - UICommand - UIInput

La segunda parte define el estado de los componentes. Estos están separados debido a componentes como UIData, donde es posible que los niños tengan (por ejemplo) por estado de fila. Esto se organiza / desorganiza a través de los mecanismos de StateHolder .