2011-03-28 14 views
5

我想將會話範圍的JSF託管bean轉換爲查看範圍。然而,當我嘗試訪問XHTML頁面,這個bean,然後我得到以下錯誤:JSF2(Mojarra)查看範圍Managed Bean希望所有成員都可序列化

java.io.NotSerializableException:foo.bar.SomeDaoClass

我有一個幫手DAO中的一員,我用於委派bean中的與持久性相關的任務。如果我讓這個DAO類實現Serializable,那麼其他UIComponent引用開始導致相同的錯誤!

主要的用例是,我點擊了一個鏈接,打開一個jQuery的燈箱彈出窗口,顯示了會話bean支持的xhtml頁面。當用戶單擊彈出窗體上的提交按鈕時,我會以編程方式刪除會話bean。問題是,如果用戶單擊彈出窗口本身的關閉按鈕,並單擊指向另一個ID的另一個鏈接,則會顯示相同的值(作爲會話範圍)!

我想在彈出窗口中查看此窗體時使用視圖範圍來保留值,並且當用戶單擊彈出窗口的關閉按鈕時,這些值可能會被丟棄。

回答

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; 
}