Пример JSF 2 PreRenderViewEvent
В JSF 2.0 вы можете присоединить системное событиеjavax.faces.event.PreRenderViewEvent для выполнения настраиваемой задачи перед отображением корневого каталога (страницы JSF).
Давайте посмотрим на полный примерPreRenderViewEvent ниже:
1. Управляемый Боб
Создайте обычный bean-компонент, содержащий сигнатуру метода «public void method-name(ComponentSystemEvent event)», позже вы попросите слушателя вызвать этот метод.
В этом методе он проверяет «role» в текущем сеансе, если роль НЕ равна «admin», затем переходит к результату «access-denied».
package com.example;
import javax.faces.application.ConfigurableNavigationHandler;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ComponentSystemEvent;
@ManagedBean(name="user")
@SessionScoped
public class UserBean{
public void isAdmin(ComponentSystemEvent event){
FacesContext fc = FacesContext.getCurrentInstance();
if (!"admin".equals(fc.getExternalContext().getSessionMap().get("role"))){
ConfigurableNavigationHandler nav
= (ConfigurableNavigationHandler)
fc.getApplication().getNavigationHandler();
nav.performNavigation("access-denied");
}
}
}
2. Страница JSF
Теперь вы используете тегf:event, чтобы прикрепить системное событие «preRenderView» к странице «default.xhtml».
default.xhtml
JSF 2 protected page example
access-denied.xhtml
Access Denied!
3. Demo
Откройте эту страницу «default.xhtml», поскольку в объекте сеанса нет значения «role», поэтому JSF перейдет на другую страницу «access-denied.xhtml».

Скачать исходный код
Скачать -JSF-2-PreRenderViewEvent-Example.zip (10 КБ)