Управляемый компонент с несколькими областями действия - PullRequest
1 голос
/ 13 марта 2012

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

Возможно ли иметь и Session-Scoped, и Request-Scoped для одного и того же компонента?

Например, у меня есть компонент myBean, это может быть как Session-Scoped, так и Request-Scoped?

РЕДАКТИРОВАТЬ

После некоторых испытаний я решил уничтожить первый сеанс, который ограничен сессией.

FacesContext.getCurrentInstance().getExternalContext().getSessionMap().remove("SessionBean1");

есть ли способ, которым я могу повторно инициализировать его в запрос, ограниченный?

Ответы [ 2 ]

1 голос
/ 13 марта 2012

Можно определить компонент одного и того же типа в двух разных областях, определив его в faces-config.xml файле . Это приведет к двум разным случаям, когда на них будут ссылаться выражения типа #{sessionScope.myBean}, #{requestScope.myBean} и т. Д.

Можно программно поместить один и тот же экземпляр компонента в несколько областей видимости, используя FacesContext.

Однако наличие таких бобов говорит о недостатке конструкции.

0 голосов
/ 13 марта 2012

Вы можете комментировать управляемый компонент с более чем одной областью действия. Код будет компилироваться и развертываться без ошибок (протестировано с Mojarra 2.1.3 / Glassfish 3.1.1).

Однако эффект будет заключаться в том, что всегда будет применяться самая узкая область. Поэтому, если вы аннотируете свой компонент с помощью @SessionScoped и @RequestScoped, компонент будет находиться в области запроса.

...