Author: husted
Date: Mon Feb 13 18:15:25 2006
New Revision: 377578

URL: http://svn.apache.org/viewcvs?rev=377578&view=rev
Log:
Resolve #36579 "Tiles that use actions appear broken" reported by Wolfgang 
Gehner.

Modified:
    
struts/action/trunk/src/java/org/apache/struts/chain/commands/servlet/PerformForward.java

Modified: 
struts/action/trunk/src/java/org/apache/struts/chain/commands/servlet/PerformForward.java
URL: 
http://svn.apache.org/viewcvs/struts/action/trunk/src/java/org/apache/struts/chain/commands/servlet/PerformForward.java?rev=377578&r1=377577&r2=377578&view=diff
==============================================================================
--- 
struts/action/trunk/src/java/org/apache/struts/chain/commands/servlet/PerformForward.java
 (original)
+++ 
struts/action/trunk/src/java/org/apache/struts/chain/commands/servlet/PerformForward.java
 Mon Feb 13 18:15:25 2006
@@ -28,6 +28,7 @@
 
 import javax.servlet.RequestDispatcher;
 import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 
 /**
  * <p>Perform forwarding or redirection based on the specified
@@ -51,12 +52,11 @@
         throws Exception {
         ServletActionContext sacontext = (ServletActionContext) context;
         String forwardPath = forwardConfig.getPath();
-        String uri = null;
+        String uri;
 
         if (forwardPath == null) {
             // Retrieve internal message resources
-            ActionServlet servlet =
-                (ActionServlet) sacontext.getActionServlet();
+            ActionServlet servlet = sacontext.getActionServlet();
             MessageResources resources = servlet.getInternal();
 
             throw new IllegalArgumentException(resources.getMessage(
@@ -74,6 +74,31 @@
         }
 
         HttpServletRequest request = sacontext.getRequest();
+
+        // Use of actions within tiles, jsp:include or c:import requires to
+        // convert forward (w/o redirect) to an include
+        // if response has been committed
+        HttpServletResponse response = sacontext.getResponse();
+
+        if (response.isCommitted() && !forwardConfig.getRedirect()) {
+            RequestDispatcher rd =
+                sacontext.getContext().getRequestDispatcher(uri);
+
+            if (rd == null) {
+                
response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
+                    "Error getting RequestDispatcher for " + uri);
+
+                return;
+            }
+
+            if (LOG.isDebugEnabled()) {
+                LOG.debug("Including " + uri);
+            }
+                
+            rd.include(request, response);
+
+            return;
+        }
 
         // Perform redirect or forward
         if (forwardConfig.getRedirect()) {



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to