Phase Listener bir JSF lifecycle’ i (yasam dongusunu) dinleyen bu surecte calistirilan bir listener cesididir.
Ornek:
PhaseListener arayuzunu implemente eden bir class yaziyoruz. Bu class icerisindeki beforePhase sayfa render edilmeden once, afterPhase ise render edildikten sonra calistirilir.
package com.mergeCons.util.userManagement;
import javax.faces.application.NavigationHandler;
import javax.faces.context.FacesContext;
import javax.faces.event.PhaseEvent;
import javax.faces.event.PhaseId;
import javax.faces.event.PhaseListener;
import javax.servlet.http.HttpSession;
public class PhaseList implements PhaseListener {
public PhaseId getPhaseId() {
System.out.println("getPhaseId() calisti");
return PhaseId.RESTORE_VIEW;
}
public void beforePhase(PhaseEvent event) {
System.out.println("beforePhase() calisti");
}
public void afterPhase(PhaseEvent event) {
System.out.println("afterPhase() calisti");
FacesContext fc = event.getFacesContext();
String page = fc.getViewRoot().getViewId();
HttpSession session = (HttpSession) fc.getExternalContext().getSession(false);
System.out.println("session.getId() = " +session.getId());
System.out.println("page = "+page);
//NavigationHandler nh = fc.getApplication().getNavigationHandler();
//nh.handleNavigation(fc, null, "logout");
}
}
faces-config.xml icerisinde asagidaki phase-listener tanimini yapiyoruz.
<lifecycle>
<phase-listener>com.bit.util.userManagement.PhaseList</phase-listener>
</lifecycle>











Merhaba hocam,
PhaseList sınıfını implemente ettim, sayfalar her çağırıldığında konsol’a bişeyler yazıyor. Ancak burada sayfaların kontrolünü nasıl sağlarım. Yani ben admin klasöründeki tüm dosyalarda bu kontrolü yapmak ve eğer oturum açılmamışsa login’e yönlendirme yapmak istiyorum.
Bu konuda düşüncelerinizi paylaşır mısınız?
İyi günler
fc.getViewRoot().getViewId(); size sayfa ismini verir buna göre kontrol yapabilirsiniz.
JSF icin farkli security frameworkler var bunlari inceleyin derim biz seam security kullaniyoruz.