2011-12-12 10 views
40

no soy capaz de entender lo que es la función de esta línea en web.xml¿Cuál es el parámetro STATE_SAVING_METHOD en JSF 2.0

<context-param> 
    <param-name>javax.faces.STATE_SAVING_METHOD</param-name> 
    <param-value>server</param-value> 
</context-param> 

He leído que el valor por defecto es NetBeans cliente. Yo sólo he enfrentado a un problema que tengo muchos granos en mi aplicación, y el <param-value> se fijó para el cliente, por lo que estaba recibiendo

java.io.NotSerializableException

error

aunque mis granos eran Serializable (es decir, implementaron la interfaz Serializable). Mis frijoles estaban en @ViewScope. Pero cuando lo cambié al servidor, las cosas van a funcionar. ¿Por qué? ¿Cuál es la diferencia cuando uso el cliente y el servidor? ¿Alguien puede explicarme con la ayuda de un ejemplo?

Gracias

Respuesta

51
java.io.NotSerializableException 

Este tipo de excepción tiene por lo general un mensaje en la causa raíz que muestra el nombre de clase completo de la clase que no implementa Serializable. Debe prestar mucha atención a este mensaje para conocer de qué clase está hablando y luego dejarlo implementar Serializable en consecuencia.

A menudo, hacer solo sus clases de beans administrados serializables no siempre es suficiente. También debe asegurarse de que cada una de sus propiedades también sea serializable. La mayoría de los tipos estándar como String, Long, etc. implementan todos ya Serializable. Pero los tipos complejos (personalizados) como beans anidados, entidades o EJB también deben ser serializables. Si algo no se puede implementar realmente como Serializable, como InputStream, entonces debe rediseñar el modelo o hacerlo transient (y tenga en cuenta que será null después de la deserialización).


¿Cuál es la diferencia cuando se utiliza el cliente y el servidor de

En primer lugar algunos antecedentes: Why JSF saves the state of UI components on server?

La diferencia técnica principal es que los client tiendas de ajuste toda la vista estado como el valor del campo de entrada oculto javax.faces.ViewState en la salida HTML generada y que el server sett lo almacena en la sesión junto con una ID única que a su vez se referencia como el valor del campo de entrada oculto javax.faces.ViewState.

Por lo tanto, la configuración a client aumenta el uso del ancho de banda de la red, pero disminuye el uso de la memoria del servidor y el ajuste a server hace al revés. Sin embargo, establecer en client tiene una ventaja funcional adicional: previene ViewExpiredException s cuando la sesión ha expirado o cuando el cliente abre demasiadas vistas.

+1

¿Qué pasa con CSRF y Phishing si utilizo la configuración del cliente. – Kayser

+1

Es encriptado/encriptable. – BalusC

11

El parámetro javax.faces.STATE_SAVING_METHOD se utiliza para especificar dónde debe guardarse el estado.

Si desea guardar el estado en el servidor (que es el predeterminado en la implementación de referencia de JavaServer Faces), especifique el valor param-value como server.

De lo contrario, para guardar el estado en el lado del cliente podemos especificar client en el param-value.

Si el estado se guarda en el cliente, el estado de toda la vista se representa en un campo oculto en la página.

+0

No guarde ViewState serializado en el lado del cliente debido a este error http://foxglovesecurity.com/2015/11/06/what-do-weblogic-websphere-jboss-jenkins-opennms-and-your-application-have- in-common-this-vulnerabilidad / –

Cuestiones relacionadas