簡體   English   中英

具有不同狀態的相同SessionBean

[英]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 registernull

這是我調用會話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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM