2015-04-15 9 views
0

В попытке реализовать FacesContextListener, который кажется the ideal place для текущего вызова, с которым мы сталкиваемся, я все еще борюсь с его реализацией. Попытка объявить его в faces-config.xml или конструкцию, похожую на ApplicationListener, не удалась (поскольку я, вероятно, ссылаюсь на вещи неправильно (за исключением самого класса, конечно)).Внедрение FacesContextListener

Может ли кто-нибудь дать указания/краткий пример реализации FacesContextListener?

ответ

1

Создайте Java-класс, который реализует интерфейс FacesContextListener.

package ch.hasselba.xpages; 

import javax.faces.context.FacesContext; 
import com.ibm.xsp.event.FacesContextListener; 

public class MyFacesContextListener implements FacesContextListener { 

    public void beforeContextReleased(FacesContext fc) { 
     System.out.println("beforeContextReleased"); 
    } 

    public void beforeRenderingPhase(FacesContext fc) { 
     System.out.println("beforeRenderingPhase"); 
    } 

} 

Теперь добавьте экземпляр класса к вашему XPage:

importPackage(ch.hasselba.xpages) 
var fcl = new ch.hasselba.xpages.MyFacesContextListener(); 
facesContext.addRequestListener(fcl); 

Надеется, что это помогает!

EDIT: Вот реализация Java с анонимным Listener:

package ch.hasselba.xpages; 

import javax.faces.context.FacesContext; 
import com.ibm.xsp.context.FacesContextExImpl; 
import com.ibm.xsp.event.FacesContextListener; 

public class MyObject { 

    private transient FacesContextListener mFCListener; 

    public MyObject() { 
      mFCListener = new FacesContextListener() { 

      public void beforeContextReleased(FacesContext fc) { 
       System.out.println("Before Releasing."); 
      } 

      public void beforeRenderingPhase(FacesContext fc) { 
       System.out.println("Before Rendering."); 
      } 
    }; 

    FacesContextExImpl fc = (FacesContextExImpl) FacesContext.getCurrentInstance(); 
    fc.addRequestListener(this.mFCListener); 
} 
} 
+0

Отличный ответ! Большое спасибо :) – Dalie