2011-03-28 10 views
5

Estoy tratando de convertir un bean gestionado JSF de ámbito de sesión para ver el ámbito. Sin embargo, cuando intento acceder a la página XHTML para este bean, entonces me sale el siguiente error:JSF2 (Mojarra) Ver alcance Managed Bean quiere que todos los miembros sean Serializables

java.io.NotSerializableException: foo.bar.SomeDaoClass

Tengo un miembro de un ayudante que DAO usar para delegar tareas relacionadas con la persistencia dentro del bean. Si hago que esta clase DAO implemente Serializable, entonces ¡otras referencias de UIComponent comienzan a causar los mismos errores!

El caso de uso principal es que tengo un enlace en el que abro una ventana emergente de jquery que muestra la página xhtml respaldada por un bean de sesión. Cuando el usuario hace clic en el botón Enviar en el formulario emergente, elimino el bean de sesión programáticamente. El problema es si el usuario hace clic en el botón de cerrar de la ventana emergente y hace clic en otro enlace que apunta a otra identificación, entonces se muestran los mismos valores (¡se abre la sesión)!

Me gustaría usar el alcance de la vista para conservar los valores mientras veo este formulario en una ventana emergente y cuando el usuario hace clic en el botón de cerrar de la ventana emergente, los valores pueden descartarse.

Respuesta

5

espero que ya se haya resuelto este problema, pero para otras personas que deseen aterrizar aquí, que no deseen utilizar el ámbito de la sesión y utilice el alcance de la vista como alternativa, lo que les obligará a utilizar la implementación serializable, puede usar la palabra clave transient junto a las propiedades que no desea hacer serializable, eso sería muy útil si quieres llamar a un servicio o dao.

ejemplo:

@ManagedBean(name="addressTableBeanExample4") 
@ViewScoped 
public class ExampleBean4 implements Serializable { 

    private static final long serialVersionUID = 1L; 

    // non serialazable class 
    private transient List<Customer> data = new ArrayList<Customer>(); 

    private Customer selected; 
} 
Cuestiones relacionadas