2012-05-30 3 views
1

У меня есть много управляемых компонентов в @SessionScoped, и я хочу очистить весь сеанс, когда пользователь выходит из системы. Кто-нибудь знает, как добиться этого? И что наиболее эффективно: @SessionScoped или @RequestScoped или @ViewScoped? Также есть аннотация, чтобы заменить перенаправления в файле faces-config.xml?очистить сеанс после выхода из системы

Могу ли я заменить следующим путем аннотирования:

<navigation-rule> 
    <from-view-id>pages/login.xhtml</from-view-id> 
    <navigation-case> 
     <from-outcome>userOK</from-outcome> 
     <to-view-id>pages/template.xhtml</to-view-id> 
     <redirect /> 
    </navigation-case> 
    <navigation-case> 
     <from-outcome>userNOK</from-outcome> 
     <to-view-id>pages/login.xhtml</to-view-id> 
    </navigation-case>  
    </navigation-rule> 

ответ

4

В управляемом фасоли

public void logout() { 
    FacesContext.getCurrentInstance().getExternalContext().invalidateSession(); 
} 

Смотри также this ответ

ВТОРАЯ ЧАСТЬ

Нет, там нет аннотации для этого , Но вы всегда можете добавить к своей ссылке "/home.xhtml?faces-redirect=true".

И для исполнения - это всегда зависит от того, что вы хотите. Если это только страница, которая загружается только один раз (например, какой-то отчет или что-то еще), то используйте компонент RequestScoped (он живет только за один запрос).

ViewScoped живет до тех пор, пока пользователь остается на одном и том же представлении, поэтому хорошо, если скажем, страница с динамической таблицей, которая делает вызовы ajax.

И SessionScoped bean проживает всю сессию, поэтому хорошо держать корзину покупок или что-то в этом роде.

+0

и для второй части проблемы есть какая-либо аннотация? – Youssef

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