Управляемый компонент с несколькими областями действия

У меня простой вопрос к вам, эксперты

Возможно ли иметь как 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Боб будет в объеме запроса.

Другие вопросы по тегам