View JSF2(Mojarra)视图范围管理Bean希望所有成员都是可序列化的

View JSF2(Mojarra)视图范围管理Bean希望所有成员都是可序列化的,view,scope,jsf-2,serializable,View,Scope,Jsf 2,Serializable,我试图将会话范围的JSF托管bean转换为查看范围的JSF托管bean。但是,当我尝试访问这个bean的xhtml页面时,会出现以下错误: java.io.NotSerializableException:foo.bar.SomeDaoClass 我有一个助手DAO的成员,用于在bean中委托与持久性相关的任务。如果我使这个DAO类实现可序列化,那么其他UIComponent引用将开始导致相同的错误 主要的使用案例是,我有一个链接,单击该链接我会打开一个jquerylightbox弹出窗口,显示

我试图将会话范围的JSF托管bean转换为查看范围的JSF托管bean。但是,当我尝试访问这个bean的xhtml页面时,会出现以下错误:

java.io.NotSerializableException:foo.bar.SomeDaoClass

我有一个助手DAO的成员,用于在bean中委托与持久性相关的任务。如果我使这个DAO类实现可序列化,那么其他UIComponent引用将开始导致相同的错误

主要的使用案例是,我有一个链接,单击该链接我会打开一个jquerylightbox弹出窗口,显示由会话bean支持的xhtml页面。当用户单击弹出表单上的submit按钮时,我会以编程方式删除会话bean。问题是,如果用户单击弹出窗口本身的关闭按钮,并单击指向另一个id的另一个链接,则会显示相同的值(会话范围)

在弹出窗口中查看此表单时,我想使用查看范围保留值,当用户单击弹出窗口的关闭按钮时,这些值可能会被丢弃。

参考Balusc博客


“简言之,@ViewScope在任何UIComponent使用binding属性绑定到bean时都会中断”

我希望您已经解决了这个问题,但是对于在这里登陆的其他人来说,他们不想使用会话作用域,而是使用视图作用域作为替代,这迫使您使用可序列化的
实现,您可以在不想使
可序列化的属性旁边使用
transient
关键字,如果您想调用服务或dao,这将非常有用

例如:

@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;
}
@ManagedBean(name=“addressTableBeanExample4”)
@视域
公共类ExampleBean4实现了可序列化{
私有静态最终长serialVersionUID=1L;
//不可序列化类
私有临时列表数据=新的ArrayList();
选择私人客户;
}