in deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/config/view/navigation/ViewConfigAwareNavigationHandler.java [69:147]
public void handleNavigation(FacesContext facesContext, String fromAction, String outcome)
{
lazyInit();
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 = this.viewConfigResolver.getDefaultErrorViewConfigDescriptor();
}
}
boolean allowCaching = true;
if (entry == null)
{
Class<?> loadedClass = ClassUtils.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(View.class) == null &&
loadedClass.getSuperclass().getAnnotation(View.class) != null)
{
allowCaching = false;
addConfiguredViewParameters(loadedClass);
loadedClass = loadedClass.getSuperclass();
}
entry = this.viewConfigResolver
.getViewConfigDescriptor((Class<? extends ViewConfig>) loadedClass);
}
}
if (entry != null)
{
//in case of false it has been added already
if (allowCaching)
{
this.viewConfigs.put(outcome, entry);
addConfiguredViewParameters(entry.getConfigClass());
}
String oldViewId = null;
if (facesContext.getViewRoot() != null)
{
oldViewId = facesContext.getViewRoot().getViewId();
}
PreViewConfigNavigateEvent navigateEvent = firePreViewConfigNavigateEvent(oldViewId, entry);
entry = tryToUpdateEntry(entry, navigateEvent);
if (entry != null)
{
outcome = convertEntryToOutcome(facesContext.getExternalContext(), entry);
}
}
}
}
this.navigationHandler.handleNavigation(facesContext, fromAction, outcome);
}