Revision: 567
          http://svn.sourceforge.net/stripes/?rev=567&view=rev
Author:   bengunter
Date:     2007-06-05 12:41:42 -0700 (Tue, 05 Jun 2007)

Log Message:
-----------
merged fix for STS-378 from trunk

Modified Paths:
--------------
    
branches/1.4.x/stripes/src/net/sourceforge/stripes/action/ForwardResolution.java
    
branches/1.4.x/stripes/src/net/sourceforge/stripes/controller/AnnotatedClassActionResolver.java
    
branches/1.4.x/stripes/src/net/sourceforge/stripes/controller/StripesConstants.java

Modified: 
branches/1.4.x/stripes/src/net/sourceforge/stripes/action/ForwardResolution.java
===================================================================
--- 
branches/1.4.x/stripes/src/net/sourceforge/stripes/action/ForwardResolution.java
    2007-06-04 17:11:19 UTC (rev 566)
+++ 
branches/1.4.x/stripes/src/net/sourceforge/stripes/action/ForwardResolution.java
    2007-06-05 19:41:42 UTC (rev 567)
@@ -41,6 +41,7 @@
 public class ForwardResolution extends OnwardResolution<ForwardResolution> 
implements Resolution {
     private boolean autoInclude = true;
     private static final Log log = Log.getInstance(ForwardResolution.class);
+    private String event;
 
     /**
      * Simple constructor that takes in the path to forward the user to.
@@ -71,6 +72,7 @@
      */
     public ForwardResolution(Class<? extends ActionBean> beanType, String 
event) {
         super(beanType, event);
+        this.event = event;
     }
 
     /**
@@ -94,6 +96,10 @@
 
         String path = getUrl();
 
+        // Set event name as a request attribute
+        String oldEvent = (String) 
request.getAttribute(StripesConstants.REQ_ATTR_EVENT_NAME);
+        request.setAttribute(StripesConstants.REQ_ATTR_EVENT_NAME, event);
+
         // Figure out if we're inside an include, and use an include instead 
of a forward
         if (autoInclude && 
request.getAttribute(StripesConstants.REQ_ATTR_INCLUDE_PATH) != null) {
             log.trace("Including URL: ", path);
@@ -103,5 +109,8 @@
             log.trace("Forwarding to URL: ", path);
             request.getRequestDispatcher(path).forward(request, response);
         }
+
+        // Revert event name to its original value
+        request.setAttribute(StripesConstants.REQ_ATTR_EVENT_NAME, oldEvent);
     }
 }

Modified: 
branches/1.4.x/stripes/src/net/sourceforge/stripes/controller/AnnotatedClassActionResolver.java
===================================================================
--- 
branches/1.4.x/stripes/src/net/sourceforge/stripes/controller/AnnotatedClassActionResolver.java
     2007-06-04 17:11:19 UTC (rev 566)
+++ 
branches/1.4.x/stripes/src/net/sourceforge/stripes/controller/AnnotatedClassActionResolver.java
     2007-06-05 19:41:42 UTC (rev 567)
@@ -380,13 +380,30 @@
      * @return String the name of the event submitted, or null if none can be 
found
      */
     public String getEventName(Class<? extends ActionBean> bean, 
ActionBeanContext context) {
-        String event = getEventNameFromRequestParams(bean, context);
+        String event = getEventNameFromRequestAttribute(bean, context);
+        if (event == null) event = getEventNameFromRequestParams(bean, 
context);
         if (event == null) event = getEventNameFromPath(bean, context);
         if (event == null) event = getEventNameFromEventNameParam(bean, 
context);
         return event;
     }
 
     /**
+     * Checks a special request attribute to get the event name. This attribute
+     * may be set when the presence of the original request parameters on a
+     * forwarded request makes it difficult to determine which event to fire.
+     * 
+     * @param bean the ActionBean type bound to the request
+     * @param context the ActionBeanContect for the current request
+     * @return the name of the event submitted, or null if none can be found
+     * @see StripesConstants#REQ_ATTR_EVENT_NAME
+     */
+    protected String getEventNameFromRequestAttribute(
+            Class<? extends ActionBean> bean, ActionBeanContext context) {
+        return (String) context.getRequest().getAttribute(
+                StripesConstants.REQ_ATTR_EVENT_NAME);
+    }
+
+    /**
      * Loops through the set of known events for the ActionBean to see if the 
event
      * names are present as parameter names in the request.  Returns the first 
event
      * name found in the request, or null if none is found.

Modified: 
branches/1.4.x/stripes/src/net/sourceforge/stripes/controller/StripesConstants.java
===================================================================
--- 
branches/1.4.x/stripes/src/net/sourceforge/stripes/controller/StripesConstants.java
 2007-06-04 17:11:19 UTC (rev 566)
+++ 
branches/1.4.x/stripes/src/net/sourceforge/stripes/controller/StripesConstants.java
 2007-06-05 19:41:42 UTC (rev 567)
@@ -79,6 +79,12 @@
     String REQ_ATTR_CURRENT_FLASH_SCOPE = "__current_flash_scope";
 
     /**
+     * The name of a request attribute that is checked first to determine the
+     * name of the event that should fire.
+     */
+    String REQ_ATTR_EVENT_NAME = "__stripes_event_name";
+
+    /**
      * Request attribute key defined by the servlet spec for storing the 
included servlet
      * path when processing a server side include.
      */


This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.

-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
Stripes-development mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/stripes-development

Reply via email to