JSF静态Bean变量范围



我看到了这个帖子:JSF -由不同机器上的浏览器共享的会话范围bean

但这是一个两年前的问题,所以我不知道从那时起JSF的世界是否有任何更新,而且我还有一些更具体的案例需要澄清。基本上,我想知道的是如何在具有不同作用域的bean中处理静态作用域变量。例如:

@ManagedBean
@ApplicationScoped
public class ApplicationBean{
    static private int someStaticInt=0;
    ...
}

由于这个bean是应用程序作用域,我完全希望someStaticInt被应用程序的所有用户共享,即用户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的MY实例中增加,还是为所有用户增加?此外,成员对象myClass呢?它没有在bean中声明为静态,但它本身有一个静态成员。如果我运行someAction, memberStaticInt会对所有用户递增还是只对使用该Bean实例的用户递增?

最后,我想知道上述情况下的所有逻辑是否也适用于RequestScoped bean。

JSF scope不会改变static的含义。静态仍然意味着静态,所以无论JSF作用域如何,该值将由同一VM中该类的所有实例共享。

相关内容

  • 没有找到相关文章

最新更新