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]