Итак, я видел этот пост:
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.