in jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/navigation/ViewConfigAwareNavigationHandler.java [79:166]
public void handleNavigation(FacesContext facesContext, String fromAction, String outcome)
{
initBeanManager();
if(outcome != null && outcome.contains("."))
{
String originalOutcome = outcome;
if(!this.otherOutcomes.contains(outcome))
{
//it isn't possible to support interfaces due to cdi restrictions
if(outcome.startsWith("class "))
{
outcome = outcome.substring(6);
}
ViewConfigDescriptor entry = this.viewConfigs.get(outcome);
if(entry == null)
{
if(DefaultErrorView.class.getName().equals(originalOutcome))
{
entry = ViewConfigCache.getDefaultErrorViewConfigDescriptor();
}
}
boolean allowCaching = true;
if(entry == null)
{
Class<?> loadedClass = tryToLoadClassForName(outcome);
if(loadedClass == null)
{
this.otherOutcomes.add(originalOutcome);
}
else if(ViewConfig.class.isAssignableFrom(loadedClass))
{
//a sub-classed page-config for annotating it with different view params
if(loadedClass.getAnnotation(Page.class) == null &&
loadedClass.getSuperclass().getAnnotation(Page.class) != null)
{
allowCaching = false;
addConfiguredViewParameters(loadedClass);
loadedClass = loadedClass.getSuperclass();
}
//noinspection unchecked
entry = ViewConfigCache.getViewConfigDescriptor((Class<? extends ViewConfig>) loadedClass);
}
}
if(entry != null)
{
if(allowCaching)
{
this.viewConfigs.put(outcome, entry);
addConfiguredViewParameters(entry.getViewConfig()); //in case of false it has been added already
}
String oldViewId = null;
if (facesContext.getViewRoot() != null)
{
oldViewId = facesContext.getViewRoot().getViewId();
}
PreViewConfigNavigateEvent navigateEvent = firePreViewConfigNavigateEvent(oldViewId, entry);
entry = tryToUpdateEntry(entry, navigateEvent);
if(entry != null && !this.implicitNavigationSupported) //entry might be null after the update
{
//jsf1.2
processViewDefinitionEntry(facesContext, entry);
//just to invoke all other nav handlers if they have to perform special tasks...
this.navigationHandler.handleNavigation(facesContext, null, null);
return;
}
else if(entry != null)
{
//jsf2+
outcome = convertEntryToOutcome(facesContext.getExternalContext(), entry);
}
}
}
}
this.navigationHandler.handleNavigation(facesContext, fromAction, outcome);
}