5

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

java.io.NotSerializableException: foo.bar.SomeDaoClass

我有一个助手 DAO 的成员,我用它来委派 bean 中与持久性相关的任务。如果我让这个 DAO 类实现 Serializable,那么其他 UIComponent 引用就会开始导致同样的错误!

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

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

4

2 回答 2

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;
}
于 2011-09-16T21:47:48.250 回答
4

参考 Balusc 博客 http://balusc.blogspot.com/2010/06/benefits-and-pitfalls-of-viewscoped.html

“简而言之:当使用绑定属性将任何 UIComponent 绑定到 bean 时,@ViewScoped 会中断”

于 2011-03-29T08:59:12.260 回答