JSF2(Mojarra)视图范围Managed Bean希望所有成员都是Serializable

时间:2011-03-28 09:33:21

标签: view scope jsf-2 serializable

我正在尝试将会话作用域的JSF托管bean转换为查看作用域。但是,当我尝试访问此bean的xhtml页面时,我收到以下错误:

java.io.NotSerializableException:foo.bar.SomeDaoClass

我有一个帮助程序DAO的成员,我用它来委托bean中的持久性相关任务。如果我使这个DAO类实现Serializable,那么其他UIComponent引用开始导致相同的错误!

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

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

2 个答案:

答案 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会中断”