Revision: 981
http://stripes.svn.sourceforge.net/stripes/?rev=981&view=rev
Author: bengunter
Date: 2008-10-21 14:35:12 +0000 (Tue, 21 Oct 2008)
Log Message:
-----------
Fixed STS-616. If a parameter is defined in the request in some way other than
through the clean URL mechanism then that value will be used instead of the
default value defined in the URL binding.
Modified Paths:
--------------
branches/1.5.x/stripes/src/net/sourceforge/stripes/controller/StripesRequestWrapper.java
Modified:
branches/1.5.x/stripes/src/net/sourceforge/stripes/controller/StripesRequestWrapper.java
===================================================================
---
branches/1.5.x/stripes/src/net/sourceforge/stripes/controller/StripesRequestWrapper.java
2008-10-21 00:37:39 UTC (rev 980)
+++
branches/1.5.x/stripes/src/net/sourceforge/stripes/controller/StripesRequestWrapper.java
2008-10-21 14:35:12 UTC (rev 981)
@@ -104,6 +104,12 @@
if (isPost && contentType != null &&
contentType.startsWith("multipart/form-data")) {
constructMultipartWrapper(request);
}
+
+ // Create a parameter map that merges the URI parameters with the
others
+ if (isMultipart())
+ this.parameterMap = new MergedParameterMap(this, this.multipart);
+ else
+ this.parameterMap = new MergedParameterMap(this);
}
/**
@@ -148,7 +154,23 @@
*/
@Override
public String[] getParameterValues(String name) {
- return getParameterMap().get(name);
+ /*
+ * When determining whether to provide a URI parameter's default
value, the merged parameter
+ * map needs to know if the parameter is otherwise defined in the
request. It calls this
+ * method to do that, so if the parameter map is not defined (which it
won't be during its
+ * construction), we delegate to the multipart wrapper or superclass.
+ */
+
+ MergedParameterMap map = getParameterMap();
+ if (map == null) {
+ if (isMultipart())
+ return this.multipart.getParameterValues(name);
+ else
+ return super.getParameterValues(name);
+ }
+ else {
+ return map.get(name);
+ }
}
/**
@@ -172,13 +194,6 @@
*/
@Override
public MergedParameterMap getParameterMap() {
- if (this.parameterMap == null) {
- if (isMultipart())
- this.parameterMap = new MergedParameterMap(this,
this.multipart);
- else
- this.parameterMap = new MergedParameterMap(this);
- }
-
return this.parameterMap;
}
@@ -262,10 +277,10 @@
* @author Ben Gunter
*/
class MergedParameterMap implements Map<String, String[]> {
- protected class Entry implements Map.Entry<String, String[]> {
+ class Entry implements Map.Entry<String, String[]> {
private String key;
- protected Entry(String key) {
+ Entry(String key) {
this.key = key;
}
@@ -302,7 +317,7 @@
private Map<String, String[]> uriParams;
private Stack<Map<String, String[]>> uriParamStack;
- protected MergedParameterMap(StripesRequestWrapper request) {
+ MergedParameterMap(HttpServletRequestWrapper request) {
this.request = request;
this.uriParams = getUriParameters(request);
if (this.uriParams == null) {
@@ -310,7 +325,7 @@
}
}
- protected MergedParameterMap(StripesRequestWrapper request,
MultipartWrapper multipart) {
+ MergedParameterMap(HttpServletRequestWrapper request, MultipartWrapper
multipart) {
this.request = request;
// extract URI parameters
@@ -416,7 +431,7 @@
/** Get the parameter map from the request that is wrapped by the [EMAIL
PROTECTED] StripesRequestWrapper}. */
@SuppressWarnings("unchecked")
- protected Map<String, String[]> getParameterMap() {
+ Map<String, String[]> getParameterMap() {
return request == null ? Collections.emptyMap() :
request.getRequest().getParameterMap();
}
@@ -424,7 +439,7 @@
* Extract new URI parameters from the URI of the given [EMAIL PROTECTED]
request} and merge them with the
* previous URI parameters.
*/
- public void pushUriParameters(HttpServletRequestWrapper request) {
+ void pushUriParameters(HttpServletRequestWrapper request) {
if (this.uriParamStack == null) {
this.uriParamStack = new Stack<Map<String, String[]>>();
}
@@ -437,7 +452,7 @@
* Restore the URI parameters to the state they were in before the
previous call to
* [EMAIL PROTECTED] #pushUriParameters(HttpServletRequestWrapper)}.
*/
- public void popUriParameters() {
+ void popUriParameters() {
if (this.uriParamStack == null || this.uriParamStack.isEmpty()) {
this.uriParams = null;
}
@@ -450,7 +465,7 @@
* Extract any parameters embedded in the URI of the given [EMAIL
PROTECTED] request} and return them in a
* [EMAIL PROTECTED] Map}. If no parameters are present in the URI, then
return null.
*/
- public Map<String, String[]> getUriParameters(HttpServletRequest request) {
+ Map<String, String[]> getUriParameters(HttpServletRequest request) {
Map<String, String[]> params = null;
UrlBinding binding =
UrlBindingFactory.getInstance().getBinding(request);
if (binding != null && binding.getParameters().size() > 0) {
@@ -470,7 +485,7 @@
value = "";
}
}
- if (value == null) {
+ if (value == null && request.getParameterValues(name) ==
null) {
value = p.getDefaultValue();
}
if (name != null && value != null) {
@@ -497,8 +512,7 @@
}
/** Merge the values from [EMAIL PROTECTED] source} into [EMAIL PROTECTED]
target}. */
- public Map<String, String[]> mergeParameters(Map<String, String[]> target,
- Map<String, String[]> source) {
+ Map<String, String[]> mergeParameters(Map<String, String[]> target,
Map<String, String[]> source) {
// target must not be null and we must not modify source
if (target == null)
target = new LinkedHashMap<String, String[]>();
@@ -530,7 +544,7 @@
* @param uriParams parameters extracted from the URI
* @return the merged parameter values
*/
- public String[] mergeParameters(String[] requestParams, String[]
uriParams) {
+ String[] mergeParameters(String[] requestParams, String[] uriParams) {
if (requestParams == null || requestParams.length == 0) {
if (uriParams == null || uriParams.length == 0)
return null;
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 the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
Stripes-development mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/stripes-development