具有不同状态的相同SessionBeans

时间:2013-06-27 04:06:24

标签: java jsf session-bean

我有一个问题让我觉得我正在以错误的方式做某事。 我有一个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 bean的方法viewScoped,当它检查收银机是否不是null时,结果是正确的......不是null所以它会重定向到所需的页面,但是 ..当调用过滤器来检查收银机是否不是null时,结果不对!因为会话bean的属性cash register带有null

这是我调用会话bean的方式吗?

GoToOrdersQueue bean的方法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,但我认为这与此无关。

1 个答案:

答案 0 :(得分:0)

我发现了问题...在ViewScoped bean中,我在构造函数中获取了sessionbean的实例,如下所示:

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

好吧,不知道为什么,但如果我在每个使用sesisoncontroller的方法中使用该代码,它都有效......

由于