in empire-db-jsf2/src/main/java/org/apache/empire/jsf2/pages/PagePhaseListener.java [58:181]
public void beforePhase(PhaseEvent pe)
{
PhaseId phaseId = pe.getPhaseId();
if (log.isTraceEnabled())
log.trace("Processing Phase {}.", phaseId);
FacesContext fc = pe.getFacesContext();
UIViewRoot vr = fc.getViewRoot();
if (vr == null)
{
/*
PartialViewContext pvc = fc.getPartialViewContext();
boolean ajax = pvc.isAjaxRequest();
boolean part = pvc.isPartialRequest();
if (!part && !ajax)
{
HttpServletRequest req = FacesUtils.getHttpRequest(fc);
String reqURI = req.getRequestURI();
log.info("No View Root for request to '"+reqURI+"' in Phase "+String.valueOf(phaseId));
}
*/
return;
}
// Get the view Id
String viewId = vr.getViewId();
if (viewId==null)
{ // Error: No viewId!
if (phaseId==PhaseId.RENDER_RESPONSE)
FacesUtils.getWebApplication().onViewNotFound(fc, FacesUtils.getHttpRequest(fc));
else
log.error("No viewId provided for PagePhaseEvent in phase "+phaseId.getName());
return;
}
// Detect view change
Map<String, Object> sessionMap = fc.getExternalContext().getSessionMap();
Object lastViewId = sessionMap.get(LAST_PAGE_VIEW_ID);
if (lastViewId == null || !(((String) lastViewId).equalsIgnoreCase(viewId)))
{ // view changes
FacesUtils.getWebApplication().onChangeView(fc, viewId);
if (fc.getResponseComplete())
return;
// set view Id
sessionMap.put(LAST_PAGE_VIEW_ID, viewId);
}
// Get Page Definition
PageDefinition pageDef = PageDefinitions.getInstance().getPageFromViewId(viewId);
if (pageDef == null)
{ // No page definition available
if (log.isDebugEnabled())
log.debug("No page definition available for viewId {}.", viewId);
}
// Check Request context path
/*
if (viewChanged)
{
log.debug("Checking view context path");
HttpServletRequest req = FacesUtils.getHttpRequest(fc);
String reqURI = req.getRequestURI();
viewId = pageDef.getPath();
int vix = viewId.lastIndexOf('.');
int rix = reqURI.lastIndexOf('.');
if (rix<vix || !viewId.regionMatches(true, 0, reqURI, rix-vix, vix))
{ // redirect to view page
String ctxPath = fc.getExternalContext().getRequestContextPath();
String pageURI = ctxPath + viewId.substring(0,vix) + ".iface";
log.warn("Invalid RequestURI '" + reqURI + "'. Redirecting to '"+pageURI+"'.");
FacesUtils.redirectDirectly(fc, pageURI);
return;
}
// Save current viewId
}
*/
// Obtain PageBean from BeanManager
String name = pageDef.getPageBeanName();
Map<String, Object> viewMap = vr.getViewMap();
Page pageBean = (Page) viewMap.get(name);
if (pageBean == null)
{ // Not available yet
Class<? extends Page> pageClass = pageDef.getPageBeanClass();
if (log.isDebugEnabled())
log.debug("Creating page bean {} for {} in Phase {}.", new Object[] { pageClass.getName(), viewId, pe.getPhaseId() });
// Use Bean Manager
pageBean = (Page)FacesUtils.getManagedBean(fc, name);
if (pageBean==null)
{ // Create Instance ourselves
log.warn("Unable to obtain page bean '{}' from BeanManager. Page bean probably not registered. Creating new instance but Injection might not work! ", name);
try
{ // Create Instance
pageBean = pageClass.newInstance();
viewMap.put(name, pageBean);
}
catch (Exception e)
{
log.error("Error creating instance of page bean " + pageClass.getName(), e);
throw new InternalException(e);
}
}
else if (!pageClass.isInstance(pageBean))
{ // Wrong class
log.warn("Page bean '"+name+"' is not an instance of class {} as expected. Detected class is {}", pageClass.getName(), pageBean.getClass().getName());
}
// Add 'page' to map
viewMap.put("page", pageBean);
}
// set definition
pageBean.setPageDefinition(pageDef);
// Init PageBean
if (pe.getPhaseId() == PhaseId.RENDER_RESPONSE)
initPageBean(pageBean, fc, viewMap);
/*
Collection<UIViewParameter> params = ViewMetadata.getViewParameters(vr);
for (UIViewParameter p : params)
{
log.info("p {} = {}", p.getName(), p.getValue());
}
*/
}