Revision: 565
http://svn.sourceforge.net/stripes/?rev=565&view=rev
Author: bengunter
Date: 2007-06-04 08:24:49 -0700 (Mon, 04 Jun 2007)
Log Message:
-----------
Fixed STS-378: incorrect event handler invoked with ForwardResolution(Class<?
extends ActionBean>, String)
Modified Paths:
--------------
trunk/stripes/src/net/sourceforge/stripes/action/ForwardResolution.java
trunk/stripes/src/net/sourceforge/stripes/controller/AnnotatedClassActionResolver.java
trunk/stripes/src/net/sourceforge/stripes/controller/StripesConstants.java
Modified:
trunk/stripes/src/net/sourceforge/stripes/action/ForwardResolution.java
===================================================================
--- trunk/stripes/src/net/sourceforge/stripes/action/ForwardResolution.java
2007-05-30 19:19:18 UTC (rev 564)
+++ trunk/stripes/src/net/sourceforge/stripes/action/ForwardResolution.java
2007-06-04 15:24:49 UTC (rev 565)
@@ -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(request.getLocale());
+ // 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:
trunk/stripes/src/net/sourceforge/stripes/controller/AnnotatedClassActionResolver.java
===================================================================
---
trunk/stripes/src/net/sourceforge/stripes/controller/AnnotatedClassActionResolver.java
2007-05-30 19:19:18 UTC (rev 564)
+++
trunk/stripes/src/net/sourceforge/stripes/controller/AnnotatedClassActionResolver.java
2007-06-04 15:24:49 UTC (rev 565)
@@ -386,13 +386,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:
trunk/stripes/src/net/sourceforge/stripes/controller/StripesConstants.java
===================================================================
--- trunk/stripes/src/net/sourceforge/stripes/controller/StripesConstants.java
2007-05-30 19:19:18 UTC (rev 564)
+++ trunk/stripes/src/net/sourceforge/stripes/controller/StripesConstants.java
2007-06-04 15:24:49 UTC (rev 565)
@@ -94,6 +94,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