Monday, April 28, 2014

How to Configure or Implement PagePhaseListener in ADF


This blog explains about configuring or implementing Page Phase Listener in an ADF application

Brief info about adf-settings.xml

The adf-settings.xml file holds project- and library-level settings such as ADF Faces help providers. The configuration settings for the adf-settings.xml files are fixed and cannot be changed during and after application deployment. There can be multiple adf-settings.xml files in an application. ADF settings file users are responsible for merging the contents of their configurations.

Step1
Create Java class which extends to PagePhaseListener as shown below. You need to override afterPhase() and beforePhase() methods as shown below.

       

  package com.atd.tirepro.view.filter;


import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.faces.event.PhaseId;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import oracle.adf.controller.v2.lifecycle.Lifecycle;
import oracle.adf.controller.v2.lifecycle.PagePhaseEvent;
import oracle.adf.controller.v2.lifecycle.PagePhaseListener;

import org.apache.myfaces.trinidad.render.ExtendedRenderKitService;
import org.apache.myfaces.trinidad.util.Service;


public class TimeOutListener implements PagePhaseListener {
    @SuppressWarnings("compatibility:-1406793285197613021")
    private static final long serialVersionUID = 1L;

    public TimeOutListener() {
        super();
    }

    /**
     * This method determines whether session timed out or not,
     * If session timed out , redirects to corresponding Apps Login page
     * based on configured properties file
     * @param phaseEvent
     */
    public void beforePhase(PagePhaseEvent phaseEvent) {
    }


    public void afterPhase(PagePhaseEvent pagePhaseEvent) {
        if (pagePhaseEvent.getPhaseId() == Lifecycle.PREPARE_RENDER_ID) {
            FacesContext facesCtx = FacesContext.getCurrentInstance();
            ExternalContext extCtx = facesCtx.getExternalContext();
            // Get HttpSession instance
            HttpSession session = (HttpSession)extCtx.getSession(false);
            // Get HttpServletRequest instance
            HttpServletRequest req =
                (HttpServletRequest)extCtx.getRequest();
        }
    }

    public PhaseId getPhaseId() {
        return PhaseId.RESTORE_VIEW;
    }
}

       
 

Step2
Configure adf-settings.xml as shown below, If this file is not available , then create a brand new xml file with exactly same name as 'adf-settings.xml' and place at 'ViewController\adfmsrc\META-INF' folder, If META-INF is not available create new directory.

Configure above PagePhaseListener class in adf-settings.xml as shown below



Step3 : Clean all, Build all and start the application, Keep the debug point in afterPhase() or beforePhase() methods,  before every page gets loaded beforePhase() method will get invoked.

No comments:

Post a Comment