0

我有一个问题让我觉得我做错了事。我有一个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"

知道,我的问题是我创建了收银机,然后我调用了 bean 的方法GoToOrdersQueueviewScoped当它检查收银机是否不是null时,结果是正确的......不是null所以它重定向到所需的页面,但是..当调用过滤器检查收银机是否不存在null时,结果不正确!因为会话 beancash register具有null!

是我调用会话 bean 的方式有问题吗?

在 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,但我认为与此无关。

4

1 回答 1

0

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

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

好吧,不知道为什么,但是如果我在使用 sesisoncontroller 的每个方法中都使用该代码,它就可以工作......

谢谢

于 2013-06-28T01:02:24.953 回答