2012-03-13 7 views
1

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

Можно ли иметь как контекст сеанса и Request-Scoped для того же компонента?

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

EDIT

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

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

Есть ли способ, чтобы я мог повторно инициализировать его до запроса с областью?

ответ

0

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

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

1

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

можно поместить один и тот же экземпляр компонента в более чем одну сферы программно с помощью FacesContext.

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

+0

так что лучше иметь две бобы? – sameer

+0

Трудно сказать. У вас по крайней мере определенно серьезный недостаток в дизайне. – BalusC

+0

@BalusC каким-либо образом настроить компонент для запроса в области видимости после уничтожения сеансового компонента с помощью facecontext? – sameer

Смежные вопросы