Revision: 847
http://stripes.svn.sourceforge.net/stripes/?rev=847&view=rev
Author: bengunter
Date: 2008-02-07 19:20:20 -0800 (Thu, 07 Feb 2008)
Log Message:
-----------
Further fixes for STS-504. Added a couple of NPE checks. Had to change the
rules for $event so that you cannot assign it a default value by doing
{$event=blah}. Instead it relies solely on @DefaultHandler. In addition,
UrlBindingParameter.getValue() no longer returns the default value if the value
is null. It probably never should have in the first place, but more importantly
it became necessary to allow calling code to know if the given value is null,
even if there is a default value. All these changes were necessary because
there were times when the default event would be added to the request
parameters even when another event was specified in a form. Thankfully, such a
condition (multiple events) now causes an exception to be thrown.
Modified Paths:
--------------
trunk/stripes/src/net/sourceforge/stripes/action/UrlBinding.java
trunk/stripes/src/net/sourceforge/stripes/controller/StripesRequestWrapper.java
trunk/stripes/src/net/sourceforge/stripes/controller/UrlBindingFactory.java
trunk/stripes/src/net/sourceforge/stripes/controller/UrlBindingParameter.java
trunk/stripes/src/net/sourceforge/stripes/util/UrlBuilder.java
Modified: trunk/stripes/src/net/sourceforge/stripes/action/UrlBinding.java
===================================================================
--- trunk/stripes/src/net/sourceforge/stripes/action/UrlBinding.java
2008-02-07 04:20:53 UTC (rev 846)
+++ trunk/stripes/src/net/sourceforge/stripes/action/UrlBinding.java
2008-02-08 03:20:20 UTC (rev 847)
@@ -45,8 +45,8 @@
* [EMAIL PROTECTED] @UrlBinding("/foo/{bar=abc}/{baz=123}")}. If a parameter
with a default value is missing
* from a request URL, it will still be made available as a request parameter
with the default
* value. Default values are automatically embedded when building URLs with
the Stripes JSP tags.
- * The default value for $event can be automatically determined from the
[EMAIL PROTECTED] DefaultHandler}
- * annotation or it can be explicitly set like any other parameter.
+ * The default value for $event is determined from the [EMAIL PROTECTED]
DefaultHandler} and may not be set in
+ * the [EMAIL PROTECTED] @UrlBinding}.
* </p>
* <p>
* Clean URLs support both prefix mapping ([EMAIL PROTECTED]
/action/foo/{bar}}) and extension mapping ([EMAIL PROTECTED]
/foo/{bar}.action}).
Modified:
trunk/stripes/src/net/sourceforge/stripes/controller/StripesRequestWrapper.java
===================================================================
---
trunk/stripes/src/net/sourceforge/stripes/controller/StripesRequestWrapper.java
2008-02-07 04:20:53 UTC (rev 846)
+++
trunk/stripes/src/net/sourceforge/stripes/controller/StripesRequestWrapper.java
2008-02-08 03:20:20 UTC (rev 847)
@@ -462,9 +462,20 @@
if (name != null) {
String value = p.getValue();
if (UrlBindingParameter.PARAMETER_NAME_EVENT.equals(name))
{
- name = value;
- value = "";
+ if (value == null) {
+ // Don't provide the default event name. The
dispatcher will handle that
+ // automatically, and there's no way of knowing at
this point if another
+ // event name is provided by a different parameter.
+ continue;
+ }
+ else {
+ name = value;
+ value = "";
+ }
}
+ if (value == null) {
+ value = p.getDefaultValue();
+ }
if (name != null && value != null) {
if (params == null) {
params = new LinkedHashMap<String, String[]>();
Modified:
trunk/stripes/src/net/sourceforge/stripes/controller/UrlBindingFactory.java
===================================================================
--- trunk/stripes/src/net/sourceforge/stripes/controller/UrlBindingFactory.java
2008-02-07 04:20:53 UTC (rev 846)
+++ trunk/stripes/src/net/sourceforge/stripes/controller/UrlBindingFactory.java
2008-02-08 03:20:20 UTC (rev 847)
@@ -366,9 +366,9 @@
// handle whatever is left
if (buf.length() > 0) {
if (escape)
- throw new ParseException("Expression must not end with escape
character", pattern);
+ throw new ParseException(pattern, "Expression must not end
with escape character");
else if (braceLevel > 0)
- throw new ParseException("Unterminated left brace ('{') in
expression", pattern);
+ throw new ParseException(pattern, "Unterminated left brace
('{') in expression");
else if (path == null)
path = buf.toString();
else if (c == '}')
@@ -388,6 +388,7 @@
* @param beanClass the bean class to which the binding applies
* @param string the parameter string
* @return a parameter object
+ * @throws ParseException if the pattern cannot be parsed
*/
protected static UrlBindingParameter parseUrlBindingParameter(
Class<? extends ActionBean> beanClass, String string) {
@@ -415,6 +416,12 @@
}
String dflt = defaultValue.length() < 1 ? null :
defaultValue.toString();
+ if (dflt != null &&
UrlBindingParameter.PARAMETER_NAME_EVENT.equals(name.toString())) {
+ throw new ParseException(string, "In ActionBean class " +
beanClass.getName()
+ + ", the " + UrlBindingParameter.PARAMETER_NAME_EVENT
+ + " parameter may not be assigned a default value. Its
default value is"
+ + " determined by the @DefaultHandler annotation.");
+ }
return new UrlBindingParameter(beanClass, name.toString(), null, dflt)
{
@Override
public String getValue() {
Modified:
trunk/stripes/src/net/sourceforge/stripes/controller/UrlBindingParameter.java
===================================================================
---
trunk/stripes/src/net/sourceforge/stripes/controller/UrlBindingParameter.java
2008-02-07 04:20:53 UTC (rev 846)
+++
trunk/stripes/src/net/sourceforge/stripes/controller/UrlBindingParameter.java
2008-02-08 03:20:20 UTC (rev 847)
@@ -85,8 +85,7 @@
}
/**
- * Get the parameter's default value. This value will be returned by
[EMAIL PROTECTED] #getValue()} if the
- * parameter's actual value is null. The default value may be null.
+ * Get the parameter's default value, which may be null.
*
* @return the default value
*/
@@ -120,13 +119,12 @@
}
/**
- * Return the parameter value that was extracted from a URI. If the value
is null, then the
- * default value will be returned.
+ * Return the parameter value that was extracted from a URI.
*
* @return parameter value
*/
public String getValue() {
- return value == null ? defaultValue : value;
+ return value;
}
@Override
Modified: trunk/stripes/src/net/sourceforge/stripes/util/UrlBuilder.java
===================================================================
--- trunk/stripes/src/net/sourceforge/stripes/util/UrlBuilder.java
2008-02-07 04:20:53 UTC (rev 846)
+++ trunk/stripes/src/net/sourceforge/stripes/util/UrlBuilder.java
2008-02-08 03:20:20 UTC (rev 847)
@@ -402,8 +402,12 @@
boolean seenQuestionMark = buffer.indexOf("?") != -1;
for (Parameter param : parameters) {
// special handling for event parameter
- if (param == this.event)
- param = new Parameter((String) this.event.value, "");
+ if (param == this.event) {
+ if (param.value == null)
+ continue;
+ else
+ param = new Parameter((String) this.event.value, "");
+ }
// Figure out whether we already have params or not
if (!seenQuestionMark) {
@@ -504,7 +508,7 @@
ok = true;
}
}
- else if (assigned.isEvent()) {
+ else if (assigned != null && assigned.isEvent()) {
// remove event parameter even if value is null
parameters.remove(assigned);
}
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: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Stripes-development mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/stripes-development