2013-06-27 23 views
0

我有一個問題,讓我覺得我在做錯誤的方式。 我有一個sessionBean與實體叫CashRegister持有收銀機。當此屬性爲null時,則表示沒有創建收銀機。同一SessionBeans與不同的州

我有一個viewScope豆的動作,在該方法GoToOrdersQueue檢查收銀(從會話bean中獲得)是不是null,然後重定向到某個頁面......如果收銀null,它顯示一條消息說收銀機必須先創建。

在另一方面,我有一個customFilter(實施javax.servlet.Filter)多數民衆贊成檢查會話bean的收銀機是不是null,允許繼續執行重定向頁面,如果收銀null,然後重定向到上面寫着一個頁面:"Cannot see the page because the Cash register must be created first"

知道,我的問題是,我創建了收銀機,然後我打電話viewScoped bean的方法GoToOrdersQueue,當它檢查是否收銀不null,結果是正確的.. .not null因此它重定向到所需的頁面, ..當調用過濾器來檢查收銀機是否不是null時,結果不正確!因爲會話bean擁有cash registernull

這是我調用會話bean的方式的問題嗎?

viewScoped bean的方法GoToOrdersQueue我祈求像這樣的SessionBean:

ControllerSession sessionbean = JsfUtil.findBean("controllerSession"); 

,其中方法findBean聲明如下:

public static <T> T findBean(String beanName) { 
    FacesContext context = FacesContext.getCurrentInstance(); 
    return (T) context.getApplication().evaluateExpressionGet(context, "#{" + beanName + "}", Object.class); 
} 

,在過濾我調用sessionbean像這樣:

HttpServletRequest req = (HttpServletRequest) request; 
HttpSession session = req.getSession(false); 
ControllerSession sessionbean = (ControllerSession) session.getAttribute("controllerSession"); 

爲什麼他們有不同的狀態(在那個特定的屬性),如果他們假設是同一個對象?我使用其他屬性,如登錄用戶,每次都能正常工作。

在此先感謝您的任何提示!

順便說一句,我使用的是tomcat 7.0.40,jsf 2.2和primefaces 3.5,但我認爲與此無關。

+0

'controllerSession'的範圍是什麼?你確定你將bean設置成正確的會話嗎? – erencan

+0

是的,它是sessionscoped,我用它來保存'登錄用戶'以及屬於用戶會話的其他內容。 – oriuken

回答

0

我發現這個問題...在ViewScoped豆,我在構造函數中獲得的SessionBean的情況下,像這樣:

public ControllerViewScoped(){ 
    sessionbean = JsfUtil.findBean("controllerSession"); 
} 

好了,不知道爲什麼,但如果我使用代碼在使用sesisoncontroller的每種方法,它的工作原理...

謝謝