所以,我看过这篇文章: JSF - session scoped bean shared by browsers on different machines
但这是两年前的一个问题,所以我不知道自那时起JSF世界是否有任何更新,我还有一些更具体的案例,我要求澄清。 基本上,我想知道的是如何在具有不同范围的bean中处理静态范围变量。例如:
@ManagedBean
@ApplicationScoped
public class ApplicationBean{
static private int someStaticInt=0;
...
}
由于这个bean是应用程序范围的,我完全希望应用程序的所有用户共享一些StaticInt,即用户A将值设置为3,所有用户此后将该值视为3.如果我是正确的我错。
但是这个场景呢:
@ManagedBean
@ViewScoped
public class ViewScopeBean{
static private int staticInt = 0;
private SomePOJO myClass;
...
public void someAction(){
SomePOJO.memberStaticInt++;
...
}
}
...
public SomePOJO{
static private int memberStaticInt = 0;
...
}
现在,这个bean是ViewScoped,因此应用程序的每个用户都有一个单独的实例。但那个静态int怎么样?如果我增加它,它只会在我的Bean实例中,或者是否会为所有用户增加。那么,那个成员对象myClass怎么样?它在bean中没有声明为static,但它本身有一个静态成员。如果我运行someAction,是否所有用户或仅使用该Bean实例的用户会增加memberStaticInt吗?
最后,我有兴趣知道上述情况中的任何和所有这些逻辑是否也适用于RequestScoped bean。
答案 0 :(得分:8)
JSF Scopes不会改变静态的含义。静态仍然意味着静态,因此无论您的JSF范围如何,该值都将由同一VM中该类的所有实例共享。