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]