Requirement – Calling a method on page load at render response time for jsf fragment in oracle ADF
Solution – Alright. Few of ADF guys will say, use pagePhaseListener is answer. Well , you are not right .pagePhaseListener is work only in jspx , not in jsff. 🙁 . As i already written about
pagePhaseListener in jspx here – invoke method on page load for jspx
Ok, we will use regionController,We will create a bean which implement regionController.
Create a bean which implements RegionController.
package com.techartifact.hte.bean.audittrailall;
import java.util.Map;
import javax.faces.context.FacesContext;
import javax.faces.event.PhaseId;
import javax.faces.event.PhaseListener;
import oracle.adf.model.RegionBinding;
import oracle.adf.model.RegionContext;
import oracle.adf.model.RegionController;
import org.apache.myfaces.trinidad.render.ExtendedRenderKitService;
import org.apache.myfaces.trinidad.util.Service;
public class AuditTrailAllAppPhaseListener implements RegionController{
public AuditTrailAllAppPhaseListener() {
super();
}
public boolean refreshRegion(RegionContext regionContext) // you need to override refresh region method.
{
int refreshFlag= regionContext.getRefreshFlag();
FacesContext fctx = FacesContext.getCurrentInstance();
//check internal request parameter
Map requestMap = fctx.getExternalContext().getRequestMap();
PhaseId currentPhase=(PhaseId)requestMap.get("oracle.adfinternal.view.faces.lifecycle.CURRENT_PHASE_ID");
if(currentPhase.getOrdinal()==PhaseId.RENDER_RESPONSE.getOrdinal()) // write custom logic of correct lifecycle phase.
{
Object showPrintableBehavior =
requestMap.get("oracle.adfinternal.view.faces.el.PrintablePage");
if (showPrintableBehavior != null)
{
if (Boolean.TRUE == showPrintableBehavior)
{
ExtendedRenderKitService erks = null;
erks =
Service.getRenderKitService(fctx, ExtendedRenderKitService.class);
//invoke JavaScript from the server
erks.addScript(fctx, "window.print();");
erks.addScript(fctx, "window.close();");
}
}
regionContext.getRegionBinding().refresh(refreshFlag);
}
return false;
}
public boolean validateRegion(RegionContext regionContext)
{
regionContext.getRegionBinding().validate();
return false;
}
public boolean isRegionViewable(RegionContext regionContext)
{
return regionContext.getRegionBinding().isViewable();
}
public String getName()
{
return null;
}
}
Ok , then you need to register this class file in jsff page definitoon file using controllerClass like below –
<?xml version="1.0" encoding="UTF-8" ?>
<pageDefinition xmlns="http://xmlns.oracle.com/adfm/uimodel"
version="11.1.1.61.92" id="audit_trail_allPageDef"
ControllerClass="com.techartifact.hte.bean.audittrailall.AuditTrailAllAppPhaseListener"
Package="com.techartifact.hte.pages.audittrailall">
<parameters/>
<executables>
That is all .Now run your page.you can write your java code on page code,in my case i call some javascript..
Happy coding with Vinay kumar in techartifact…… 🙂