Revision: 590
http://svn.sourceforge.net/stripes/?rev=590&view=rev
Author: bengunter
Date: 2007-07-22 19:58:20 -0700 (Sun, 22 Jul 2007)
Log Message:
-----------
Added support for special parameter name $event in clean URLs.
Modified Paths:
--------------
trunk/stripes/src/net/sourceforge/stripes/action/OnwardResolution.java
trunk/stripes/src/net/sourceforge/stripes/controller/StripesFilter.java
trunk/stripes/src/net/sourceforge/stripes/controller/UrlBindingParameter.java
trunk/stripes/src/net/sourceforge/stripes/tag/LinkTagSupport.java
trunk/stripes/src/net/sourceforge/stripes/util/UrlBuilder.java
Modified: trunk/stripes/src/net/sourceforge/stripes/action/OnwardResolution.java
===================================================================
--- trunk/stripes/src/net/sourceforge/stripes/action/OnwardResolution.java
2007-07-22 17:58:26 UTC (rev 589)
+++ trunk/stripes/src/net/sourceforge/stripes/action/OnwardResolution.java
2007-07-23 02:58:20 UTC (rev 590)
@@ -19,7 +19,6 @@
import java.util.Map;
import net.sourceforge.stripes.controller.StripesFilter;
-import net.sourceforge.stripes.format.Formatter;
import net.sourceforge.stripes.util.UrlBuilder;
/**
@@ -37,6 +36,7 @@
*/
public abstract class OnwardResolution<T extends OnwardResolution<T>> {
private String path;
+ private String event;
private Map<String,Object> parameters = new HashMap<String,Object>();
/**
@@ -67,7 +67,7 @@
*/
public OnwardResolution(Class<? extends ActionBean> beanType, String
event) {
this(beanType);
- addParameter(event);
+ this.event = event;
}
/** Accessor for the path that the user should be sent to. */
@@ -173,6 +173,9 @@
*/
public String getUrl(Locale locale) {
UrlBuilder builder = new UrlBuilder(locale, path, false);
+ if (event != null) {
+ builder.setEvent(event);
+ }
builder.addParameters(this.parameters);
return builder.toString();
}
Modified:
trunk/stripes/src/net/sourceforge/stripes/controller/StripesFilter.java
===================================================================
--- trunk/stripes/src/net/sourceforge/stripes/controller/StripesFilter.java
2007-07-22 17:58:26 UTC (rev 589)
+++ trunk/stripes/src/net/sourceforge/stripes/controller/StripesFilter.java
2007-07-23 02:58:20 UTC (rev 590)
@@ -305,7 +305,11 @@
String name = p.getName();
if (name != null) {
String value = p.getValue();
- if (value != null) {
+ if (UrlBindingParameter.PARAMETER_NAME_EVENT.equals(name))
{
+ name = value;
+ value = "";
+ }
+ if (name != null && value != null) {
name = URLEncoder.encode(name, "UTF-8");
value = URLEncoder.encode(value, "UTF-8");
url.append(separator).append(name).append('=').append(value);
Modified:
trunk/stripes/src/net/sourceforge/stripes/controller/UrlBindingParameter.java
===================================================================
---
trunk/stripes/src/net/sourceforge/stripes/controller/UrlBindingParameter.java
2007-07-22 17:58:26 UTC (rev 589)
+++
trunk/stripes/src/net/sourceforge/stripes/controller/UrlBindingParameter.java
2007-07-23 02:58:20 UTC (rev 590)
@@ -21,6 +21,9 @@
* @since Stripes 1.5
*/
public class UrlBindingParameter {
+ /** The special parameter name for the event to execute */
+ public static final String PARAMETER_NAME_EVENT = "$event";
+
protected String name;
protected String value;
protected String defaultValue;
Modified: trunk/stripes/src/net/sourceforge/stripes/tag/LinkTagSupport.java
===================================================================
--- trunk/stripes/src/net/sourceforge/stripes/tag/LinkTagSupport.java
2007-07-22 17:58:26 UTC (rev 589)
+++ trunk/stripes/src/net/sourceforge/stripes/tag/LinkTagSupport.java
2007-07-23 02:58:20 UTC (rev 590)
@@ -159,7 +159,7 @@
String base = getPreferredBaseUrl();
UrlBuilder builder = new
UrlBuilder(pageContext.getRequest().getLocale(), base, false);
if (this.event != null) {
- builder.addParameter(this.event);
+ builder.setEvent(this.event);
}
if (addSourcePage) {
builder.addParameter(StripesConstants.URL_KEY_SOURCE_PAGE,
request.getServletPath());
Modified: trunk/stripes/src/net/sourceforge/stripes/util/UrlBuilder.java
===================================================================
--- trunk/stripes/src/net/sourceforge/stripes/util/UrlBuilder.java
2007-07-22 17:58:26 UTC (rev 589)
+++ trunk/stripes/src/net/sourceforge/stripes/util/UrlBuilder.java
2007-07-23 02:58:20 UTC (rev 590)
@@ -66,6 +66,7 @@
private String anchor;
private Locale locale;
private String parameterSeparator;
+ private Parameter event;
private List<Parameter> parameters = new ArrayList<Parameter>();
private String url;
@@ -146,6 +147,22 @@
}
/**
+ * Get the name of the event to be executed by this URL.
+ */
+ public String getEvent() {
+ return (String) (event == null ? null : event.value);
+ }
+
+ /**
+ * Set the name of the event to be executed by this URL.
+ *
+ * @param event the event name
+ */
+ public void setEvent(String event) {
+ this.event = new Parameter(UrlBindingParameter.PARAMETER_NAME_EVENT,
event);
+ }
+
+ /**
* Returns the string that will be used to separate parameters in the
query string.
* Will usually be either '&' for query strings that will be embedded
in HTML
* pages and '&' otherwise.
@@ -315,6 +332,17 @@
*/
protected String build() {
try {
+ // special handling for event parameter
+ List<Parameter> parameters;
+ if (event == null || (event != null && !event.skip)) {
+ parameters = this.parameters;
+ }
+ else {
+ parameters = new ArrayList<Parameter>(this.parameters.size() +
1);
+ parameters.add(new Parameter((String) this.event.value, ""));
+ parameters.addAll(this.parameters);
+ }
+
StringBuilder buffer = new StringBuilder(256);
buffer.append(getBaseURL());
boolean seenQuestionMark = buffer.indexOf("?") != -1;
@@ -365,6 +393,10 @@
if (!map.containsKey(p.name))
map.put(p.name, p);
}
+ if (event != null) {
+ map.put(event.name, event);
+ event.skip = false;
+ }
StringBuilder buf = new StringBuilder(256);
buf.append(binding.getPath());
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: Splunk Inc.
Still grepping through log files to find problems? Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >> http://get.splunk.com/
_______________________________________________
Stripes-development mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/stripes-development