JSF: как перенаправить пользователя на другую страницу в соответствии со значением определенного атрибута сеанса FacesContext

В моем приложении JSF мне нужно перенаправить пользователя со страницы A на страницу B, если атрибут сеанса, такой как userRole, имеет значение «участник», и на страницу C, например, если это «автор».

Мне сказали, что я должен реализовать прослушиватель страниц или, возможно, прослушиватель сеансов. Хотя я понимаю, что написание класса слушателя довольно просто и стандартно, я не знаю, как настроить его на самой странице JSF (для прослушивания сеанса).

Кто-нибудь?


person Skyhan    schedule 10.02.2011    source источник


Ответы (1)


Слушатель сеанса (HttpSessionListener) не подходит поскольку у него нет ссылки на текущий HTTP-запрос/ответ, которые являются обязательными для изменения пункта назначения запроса/ответа.

Используйте фильтр. Чтобы узнать больше о фильтрах, проверьте наши servlet-filters информационная страница тега. Обратите внимание, что управляемые компоненты JSF в области сеанса сами по себе хранятся как атрибут HttpSession с именем управляемого компонента в качестве ключа. Вы можете получить к ним доступ в методе doFilter() следующим образом:

Bean bean = (Bean) ((HttpServletRequest) request).getSession().getAttribute("bean");

Или, когда это должно быть определено на основе действия POST, просто верните другой результат в методе действия управляемого компонента. Затем просто используйте (неявную) навигацию JSF. Псевдо:

public String submit() {
    if (user is contributor) return "pageB";
    if (user is author) return "pageC";
    return "pageA";
}
person BalusC    schedule 10.02.2011
comment
спасибо за совет и за то, что всегда были рядом с нами. Ваш совет действителен также для прослушивания тайм-аутов сеанса? - person Skyhan; 22.03.2011
comment
Пожалуйста. Там вы используете HttpSessionListener или HttpSessionBindingListener для, в зависимости от единственного требования. - person BalusC; 22.03.2011