Управляемый компонент с несколькими областями действия
У меня простой вопрос к вам, эксперты
Возможно ли иметь как Session-Scoped, так и Request-Scoped для одного и того же компонента?
Например, у меня есть боб myBean
может ли это быть как Session-Scoped
а также Request-Scoped
?
РЕДАКТИРОВАТЬ
После нескольких испытаний я решил уничтожить первую сессию, которая является областью видимости.
FacesContext.getCurrentInstance().getExternalContext().getSessionMap().remove("SessionBean1");
Есть ли способ, которым я могу повторно инициализировать его для одного запроса?
2 ответа
Можно определить бин одного типа в двух разных областях, определив его в faces-config.xml
файл Это приведет к двум различным случаям при обращении через выражения, такие как#{sessionScope.myBean}
,#{requestScope.myBean}
, так далее.
Можно поместить один и тот же экземпляр компонента в более чем одну область видимости программно, используяFacesContext
,
Однако наличие таких бобов говорит о конструктивном недостатке.
Вы можете аннотировать управляемый компонент с более чем одной областью действия. Код будет компилироваться и развертываться без ошибок (протестировано с Mojarra 2.1.3 / Glassfish 3.1.1).
Однако эффект будет заключаться в том, что всегда будет применяться самая узкая область. Так что если вы аннотируете свой боб @SessionScoped
а также @RequestScoped
Боб будет в объеме запроса.