JSF Static Bean Variable Scope - PullRequest
       29

JSF Static Bean Variable Scope

4 голосов
/ 02 августа 2011

Итак, я видел этот пост: JSF - сессионный компонент, используемый в браузерах на разных машинах

Но это был вопрос двухлетней давности, поэтому я не знаю, были ли какие-либо обновления в мире 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;
    ...
}

Теперь этот компонент - ViewScoped, поэтому для каждого пользователя приложения существует отдельный экземпляр. Но как насчет этого статического int? Если я увеличу это значение, оно будет только в МОЕМ экземпляре Бина или будет увеличиваться для всех пользователей. Кроме того, как насчет этого объекта-члена, myClass? Он не объявлен статическим в бине, но сам имеет статический член. Если я запускаю someAction, будет ли увеличиваться memberStaticInt для всех пользователей или только для пользователя, использующего этот экземпляр Бина?

Наконец, мне было бы интересно узнать, применима ли такая логика в вышеупомянутых случаях и к bean-компонентам RequestScoped.

1 Ответ

8 голосов
/ 02 августа 2011

JSF Scopes не изменяет значение статического. Статический по-прежнему означает статический, поэтому независимо от вашей области действия JSF это значение будет совместно использоваться всеми экземплярами этого класса в одной и той же виртуальной машине.

...