This is an automated email from the ASF dual-hosted git repository.

lukaszlenart pushed a commit to branch feature/WW-5463-servlet-path
in repository https://gitbox.apache.org/repos/asf/struts.git

commit c4007acbffad30e2a0aa117848cb2ea5ac12babe
Author: Lukasz Lenart <lukaszlen...@apache.org>
AuthorDate: Fri Nov 15 08:45:35 2024 +0100

    WW-5463 Exposes final location as request attribute FORWARD_SERVLET_PATH
---
 .../main/java/org/apache/struts2/result/ServletDispatcherResult.java  | 3 +++
 .../java/org/apache/struts2/result/ServletDispatcherResultTest.java   | 4 ++++
 2 files changed, 7 insertions(+)

diff --git 
a/core/src/main/java/org/apache/struts2/result/ServletDispatcherResult.java 
b/core/src/main/java/org/apache/struts2/result/ServletDispatcherResult.java
index d50ebadf5..5e906d7d1 100644
--- a/core/src/main/java/org/apache/struts2/result/ServletDispatcherResult.java
+++ b/core/src/main/java/org/apache/struts2/result/ServletDispatcherResult.java
@@ -158,6 +158,9 @@ public class ServletDispatcherResult extends 
StrutsResultSupport {
             //if we are inside an action tag, we always need to do an include
             boolean insideActionTag = (Boolean) 
ObjectUtils.defaultIfNull(request.getAttribute(StrutsStatics.STRUTS_ACTION_TAG_INVOCATION),
 Boolean.FALSE);
 
+            // this should allow integration with third-party view related 
frameworks
+            request.setAttribute(RequestDispatcher.FORWARD_SERVLET_PATH, 
finalLocation.substring(0, finalLocation.indexOf('?')));
+
             // If we're included, then include the view
             // Otherwise do forward
             // This allow the page to, for example, set content type
diff --git 
a/core/src/test/java/org/apache/struts2/result/ServletDispatcherResultTest.java 
b/core/src/test/java/org/apache/struts2/result/ServletDispatcherResultTest.java
index 2947e71e5..c64c9d76a 100644
--- 
a/core/src/test/java/org/apache/struts2/result/ServletDispatcherResultTest.java
+++ 
b/core/src/test/java/org/apache/struts2/result/ServletDispatcherResultTest.java
@@ -18,6 +18,7 @@
  */
 package org.apache.struts2.result;
 
+import jakarta.servlet.RequestDispatcher;
 import org.apache.struts2.ActionContext;
 import org.apache.struts2.StrutsInternalTestCase;
 import org.apache.struts2.StrutsStatics;
@@ -47,6 +48,7 @@ public class ServletDispatcherResultTest extends 
StrutsInternalTestCase implemen
         view.execute(invocation);
 
         assertEquals("foo.jsp", response.getForwardedUrl());
+        assertEquals("foo.jsp", 
request.getAttribute(RequestDispatcher.FORWARD_SERVLET_PATH));
     }
 
     public void testInclude() throws Exception {
@@ -60,6 +62,7 @@ public class ServletDispatcherResultTest extends 
StrutsInternalTestCase implemen
         view.execute(invocation);
 
         assertEquals("foo.jsp", response.getIncludedUrl());
+        assertEquals("foo.jsp", 
request.getAttribute(RequestDispatcher.FORWARD_SERVLET_PATH));
     }
 
     public void testWithParameter() throws Exception {
@@ -73,6 +76,7 @@ public class ServletDispatcherResultTest extends 
StrutsInternalTestCase implemen
 
         // See https://issues.apache.org/jira/browse/WW-5486
         assertEquals("1", stack.findString("#parameters.bar"));
+        assertEquals("foo.jsp", 
request.getAttribute(RequestDispatcher.FORWARD_SERVLET_PATH));
     }
 
     @Override

Reply via email to