1
我在我的項目中的以下問題:JSF SessionScoped managedBean與ViewScoped managedBean結合
我們有2種具有以下配置管理的豆類:
@ManagedBean
@SessionScoped
public class SessionBean {
private PersonnelFile personnelFile; // + getters/setters
}
@ManagedBean
@ViewScoped
public class ViewBean {
@ManagedProperty("#{sessionBean}")
private SessionBean sessionBean;
public void selectPersonnel() {
sessionBean.getPersonnelFile().setPerson(new Person());
}
}
這還不是全部的代碼,但它給你的sitatution的總體思路:
- SessionScoped豆,其保存會話對象
- 的Vie wScoped豆持有視圖相關的對象,並在SessionScoped bean的引用
現在的問題是:
- 訪問我的看法
- 我做了幾個後背上,以相同的看法,每次回到視圖..到目前爲止這麼好
- 在某個特定時刻,我使用來自視圖的信息在SessionScoped bean中設置了會話對象,並且保留了我的視圖...迄今爲止這麼好
- 現在,當我回到th是視圖,他創建一個新的ViewScoped bean實例(如預期的)並設置SessionScoped bean(因爲ManagedProperty註釋)
- 當我調試這個時,我可以看到對SessionScoped bean的引用保持不變,所以這是同一個對象
- 不過,我以前在SessionScoped豆集已經成爲
null
對象,這意味着他「丟失」有關該對象的會話信息 - 我從來不重置在SessionScoped豆這個對象,所以我不看看它可能出錯的地方...
如果你想要更多的解釋或如果你希望我更好地說出這個問題,讓我知道或使用編輯按鈕!
*「我永遠不會重置在SessionScoped豆這個對象」 *。在代碼中肯定會有一些東西改變了這個屬性。沒有魔法。根據迄今爲止提供的信息,我們不能指出任何可能的原因。您需要在調試器中的'private Person person;'行上放置一個可變監視斷點。然後你可以檢查試圖改變它的堆棧。 – BalusC 2012-01-10 17:02:53
我想我們可能已經發現了這個問題。在我們的web.xml,我們使用以下設置: '<的context-param> javax.faces.STATE_SAVING_METHOD服務器 PARAM值> 的context-param>' –
2012-01-11 08:21:02
嗯,該JSF你正在使用的是impl/version嗎? – BalusC 2012-01-11 13:01:20