我有一个问题让我觉得我正在以错误的方式做某事。
我有一个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,但我认为这与此无关。
答案 0 :(得分:0)
我发现了问题...在ViewScoped bean中,我在构造函数中获取了sessionbean的实例,如下所示:
public ControllerViewScoped(){
sessionbean = JsfUtil.findBean("controllerSession");
}
好吧,不知道为什么,但如果我在每个使用sesisoncontroller的方法中使用该代码,它都有效......
由于