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 2007/09/25 02:07:20 UTC

svn commit: r579021 - in /struts/struts2/trunk/core/src/main/java/org/apache/struts2: config/StrutsXmlConfigurationProvider.java dispatcher/FilterDispatcher.java dispatcher/StrutsRequestWrapper.java

Author: mrdon
Date: Mon Sep 24 17:07:19 2007
New Revision: 579021

URL: http://svn.apache.org/viewvc?rev=579021&view=rev
Log:
Better handling of action context creation
WW-2203

Modified:
    struts/struts2/trunk/core/src/main/java/org/apache/struts2/config/StrutsXmlConfigurationProvider.java
    struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/FilterDispatcher.java
    struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/StrutsRequestWrapper.java

Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/config/StrutsXmlConfigurationProvider.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/config/StrutsXmlConfigurationProvider.java?rev=579021&r1=579020&r2=579021&view=diff
==============================================================================
--- struts/struts2/trunk/core/src/main/java/org/apache/struts2/config/StrutsXmlConfigurationProvider.java (original)
+++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/config/StrutsXmlConfigurationProvider.java Mon Sep 24 17:07:19 2007
@@ -162,7 +162,11 @@
     @Override
     public boolean needsReload() {
         ActionContext ctx = ActionContext.getContext();
-        return ctx.get(reloadKey) == null && super.needsReload();
+        if (ctx != null) {
+            return ctx.get(reloadKey) == null && super.needsReload();
+        } else {
+            return true;
+        }
 
     }
     

Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/FilterDispatcher.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/FilterDispatcher.java?rev=579021&r1=579020&r2=579021&view=diff
==============================================================================
--- struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/FilterDispatcher.java (original)
+++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/FilterDispatcher.java Mon Sep 24 17:07:19 2007
@@ -52,6 +52,8 @@
 
 import com.opensymphony.xwork2.inject.Inject;
 import com.opensymphony.xwork2.util.ClassLoaderUtil;
+import com.opensymphony.xwork2.util.ValueStack;
+import com.opensymphony.xwork2.util.ValueStackFactory;
 import com.opensymphony.xwork2.util.profiling.UtilTimerStack;
 import com.opensymphony.xwork2.ActionContext;
 
@@ -386,6 +388,12 @@
 
         String timerKey = "FilterDispatcher_doFilter: ";
         try {
+            
+            // FIXME: this should be refactored better to not duplicate work with the action invocation
+            ValueStack stack = dispatcher.getContainer().getInstance(ValueStackFactory.class).createValueStack();
+            ActionContext ctx = new ActionContext(stack.getContext());
+            ActionContext.setContext(ctx);
+            
             UtilTimerStack.push(timerKey);
             request = prepareDispatcherAndWrapRequest(request, response);
             ActionMapping mapping;

Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/StrutsRequestWrapper.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/StrutsRequestWrapper.java?rev=579021&r1=579020&r2=579021&view=diff
==============================================================================
--- struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/StrutsRequestWrapper.java (original)
+++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/StrutsRequestWrapper.java Mon Sep 24 17:07:19 2007
@@ -62,26 +62,27 @@
 
         ActionContext ctx = ActionContext.getContext();
         Object attribute = super.getAttribute(s);
-
-        if (attribute == null) {
-            boolean alreadyIn = false;
-            Boolean b = (Boolean) ctx.get("__requestWrapper.getAttribute");
-            if (b != null) {
-                alreadyIn = b.booleanValue();
-            }
-
-            // note: we don't let # come through or else a request for
-            // #attr.foo or #request.foo could cause an endless loop
-            if (!alreadyIn && s.indexOf("#") == -1) {
-                try {
-                    // If not found, then try the ValueStack
-                    ctx.put("__requestWrapper.getAttribute", Boolean.TRUE);
-                    ValueStack stack = ctx.getValueStack();
-                    if (stack != null) {
-                        attribute = stack.findValue(s);
+        if (ctx != null) {
+            if (attribute == null) {
+                boolean alreadyIn = false;
+                Boolean b = (Boolean) ctx.get("__requestWrapper.getAttribute");
+                if (b != null) {
+                    alreadyIn = b.booleanValue();
+                }
+    
+                // note: we don't let # come through or else a request for
+                // #attr.foo or #request.foo could cause an endless loop
+                if (!alreadyIn && s.indexOf("#") == -1) {
+                    try {
+                        // If not found, then try the ValueStack
+                        ctx.put("__requestWrapper.getAttribute", Boolean.TRUE);
+                        ValueStack stack = ctx.getValueStack();
+                        if (stack != null) {
+                            attribute = stack.findValue(s);
+                        }
+                    } finally {
+                        ctx.put("__requestWrapper.getAttribute", Boolean.FALSE);
                     }
-                } finally {
-                    ctx.put("__requestWrapper.getAttribute", Boolean.FALSE);
                 }
             }
         }