Author: mrdon Date: Sat Apr 19 06:44:32 2008 New Revision: 649812 URL: http://svn.apache.org/viewvc?rev=649812&view=rev Log: Fixing NPE for navigations that don't involve a Struts 2 action WW-2572
Modified: struts/struts2/trunk/plugins/jsf/src/main/java/org/apache/struts2/jsf/StrutsNavigationHandler.java Modified: struts/struts2/trunk/plugins/jsf/src/main/java/org/apache/struts2/jsf/StrutsNavigationHandler.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/jsf/src/main/java/org/apache/struts2/jsf/StrutsNavigationHandler.java?rev=649812&r1=649811&r2=649812&view=diff ============================================================================== --- struts/struts2/trunk/plugins/jsf/src/main/java/org/apache/struts2/jsf/StrutsNavigationHandler.java (original) +++ struts/struts2/trunk/plugins/jsf/src/main/java/org/apache/struts2/jsf/StrutsNavigationHandler.java Sat Apr 19 06:44:32 2008 @@ -59,28 +59,36 @@ public void handleNavigation(FacesContext facesContext, String fromAction, String outcome) { ActionContext ctx = ActionContext.getContext(); if (outcome != null) { - ActionConfig config = ctx.getActionInvocation().getProxy().getConfig(); - Map results = config.getResults(); - - ResultConfig resultConfig = null; - - synchronized (config) { - try { - resultConfig = (ResultConfig) results.get(outcome); - } catch (NullPointerException e) { - } - if (resultConfig == null) { - // If no result is found for the given resultCode, try to get a wildcard '*' match. - resultConfig = (ResultConfig) results.get("*"); - } - } - if (resultConfig != null) { - ctx.getActionInvocation().setResultCode(outcome); - } else { - // Failing over to parent handler - parent.handleNavigation(facesContext, fromAction, outcome); - } + if (ctx == null && ctx.getActionInvocation() == null) { + delegateToParentNavigation(facesContext, fromAction, outcome); + } else { + ActionConfig config = ctx.getActionInvocation().getProxy().getConfig(); + Map results = config.getResults(); + + ResultConfig resultConfig = null; + + synchronized (config) { + try { + resultConfig = (ResultConfig) results.get(outcome); + } catch (NullPointerException e) { + } + if (resultConfig == null) { + // If no result is found for the given resultCode, try to get a wildcard '*' match. + resultConfig = (ResultConfig) results.get("*"); + } + } + if (resultConfig != null) { + ctx.getActionInvocation().setResultCode(outcome); + } else { + delegateToParentNavigation(facesContext, fromAction, outcome); + } + } } } + + private void delegateToParentNavigation(FacesContext facesContext, String fromAction, String outcome) { + // Failing over to parent handler + parent.handleNavigation(facesContext, fromAction, outcome); + } }