JSF静态Bean变量范围

时间:2011-08-01 23:03:53

标签: jsf jsf-2 javabeans scope

所以,我看过这篇文章: 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。

1 个答案:

答案 0 :(得分:8)

JSF Scopes不会改变静态的含义。静态仍然意味着静态,因此无论您的JSF范围如何,该值都将由同一VM中该类的所有实例共享。