我有一个问题让我觉得我做错了事。我有一个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 的方法GoToOrdersQueue
,viewScoped
当它检查收银机是否不是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,但我认为与此无关。