[英]Same SessionBeans with different states
我遇到一個問題,使我認為我做錯事了。 我有一個sessionBean
和一個名為CashRegister
的實體,該實體持有收銀機。 如果此屬性為null
,則意味着尚未創建任何收銀機。
我在viewScope bean中有一個操作,該方法在GoToOrdersQueue
方法中檢查(從會話bean獲取的)收銀機是否不為null
,然后重定向到特定頁面...如果收銀機為null
,則顯示一條消息,指出必須先創建收銀機。
另一方面,我有一個customFilter
(實現javax.servlet.Filter
),它檢查會話bean的收銀機是否不為null
,允許繼續到重定向的頁面,如果收銀機為null
,則重定向至頁面上顯示: "Cannot see the page because the Cash register must be created first"
知道了,我的問題是,我創建了收銀機,然后調用該方法GoToOrdersQueue
中的viewScoped
豆,當它檢查是否收銀不null
,結果是正確的......沒有null
所以它重定向到所需的頁面, 但是 ..當調用過濾器檢查收銀機是否不為null
,結果是錯誤的! 因為會話bean的屬性cash register
為null
!
這是我調用會話bean的方式嗎?
在該方法GoToOrdersQueue
中的viewScoped
豆我祈求像這樣的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,但我認為與此無關。
我發現了問題...在ViewScoped bean中,我在構造函數中獲取了sessionbean的實例,如下所示:
public ControllerViewScoped(){
sessionbean = JsfUtil.findBean("controllerSession");
}
好吧,不知道為什么,但是如果我在使用sesisoncontroller的每種方法中都使用該代碼,它將起作用...
謝謝
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.