我正在尝试将会话作用域的JSF托管bean转换为查看作用域。但是,当我尝试访问此bean的xhtml页面时,我收到以下错误:
java.io.NotSerializableException:foo.bar.SomeDaoClass
我有一个帮助程序DAO的成员,我用它来委托bean中的持久性相关任务。如果我使这个DAO类实现Serializable,那么其他UIComponent引用开始导致相同的错误!
主要用例是我点击了一个链接,我打开一个jquery灯箱弹出窗口,显示由会话bean支持的xhtml页面。当用户单击弹出窗体上的提交按钮时,我以编程方式删除会话bean。问题是如果用户单击弹出窗口本身的关闭按钮,并单击另一个指向另一个id的链接,则会显示相同的值(是会话范围的)!
我想在弹出窗口中查看此窗体时使用视图范围来保留值,当用户单击弹出窗口的关闭按钮时,值可能会被丢弃。
答案 0 :(得分:5)
我希望你已经解决了这个问题,但是对于其他登陆这里的人来说,谁不想使用会话范围并使用视图范围作为替代,这迫使你使用serializable
实现,你可以使用您不希望制作transient
的属性旁边的serializable
关键字,如果您想要调用服务或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;
}
答案 1 :(得分:4)
参考Balusc博客 http://balusc.blogspot.com/2010/06/benefits-and-pitfalls-of-viewscoped.html
“简而言之:当使用绑定属性将任何UIComponent绑定到bean时,@ ViewScoped会中断”