You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@struts.apache.org by mr...@apache.org on 2008/04/19 15:44:34 UTC

svn commit: r649812 - /struts/struts2/trunk/plugins/jsf/src/main/java/org/apache/struts2/jsf/StrutsNavigationHandler.java

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);
+	}
 
 }