You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by sv...@apache.org on 2012/06/15 08:15:46 UTC
git commit: WICKET-4608 Vars in ValidationErrors should be properly
converted
Updated Branches:
refs/heads/master 52b5bea8b -> c5d26ae9f
WICKET-4608 Vars in ValidationErrors should be properly converted
Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/c5d26ae9
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/c5d26ae9
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/c5d26ae9
Branch: refs/heads/master
Commit: c5d26ae9f2f6af7b86c0fb0599e3e3333f2eae3c
Parents: 52b5bea
Author: svenmeier <sv...@apache.org>
Authored: Fri Jun 15 08:14:22 2012 +0200
Committer: svenmeier <sv...@apache.org>
Committed: Fri Jun 15 08:14:22 2012 +0200
----------------------------------------------------------------------
.../wicket/markup/html/form/FormComponent.java | 51 +++++++++++----
.../wicket/validation/IErrorMessageSource.java | 27 +-------
.../apache/wicket/validation/ValidationError.java | 11 +--
.../html/form/LocalizedErrorMessageTest.java | 42 ++++++++-----
.../markup/html/form/LocalizedMessagePage.html | 2 +-
.../markup/html/form/LocalizedMessagePage.java | 10 ++-
6 files changed, 79 insertions(+), 64 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/wicket/blob/c5d26ae9/wicket-core/src/main/java/org/apache/wicket/markup/html/form/FormComponent.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/FormComponent.java b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/FormComponent.java
index a0d3cf3..e62cbd9 100644
--- a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/FormComponent.java
+++ b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/FormComponent.java
@@ -36,6 +36,7 @@ import org.apache.wicket.IConverterLocator;
import org.apache.wicket.Localizer;
import org.apache.wicket.WicketRuntimeException;
import org.apache.wicket.behavior.Behavior;
+import org.apache.wicket.core.util.lang.WicketObjects;
import org.apache.wicket.markup.ComponentTag;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.IPropertyReflectionAwareModel;
@@ -43,11 +44,10 @@ import org.apache.wicket.model.Model;
import org.apache.wicket.util.convert.ConversionException;
import org.apache.wicket.util.convert.IConverter;
import org.apache.wicket.util.lang.Args;
-import org.apache.wicket.core.util.lang.WicketObjects;
import org.apache.wicket.util.string.StringList;
import org.apache.wicket.util.string.StringValue;
import org.apache.wicket.util.string.Strings;
-import org.apache.wicket.util.string.interpolator.MapVariableInterpolator;
+import org.apache.wicket.util.string.interpolator.VariableInterpolator;
import org.apache.wicket.util.visit.IVisit;
import org.apache.wicket.util.visit.IVisitFilter;
import org.apache.wicket.util.visit.IVisitor;
@@ -116,7 +116,7 @@ public abstract class FormComponent<T> extends LabeledWebMarkupContainer
* @see org.apache.wicket.validation.IErrorMessageSource#getMessage(java.lang.String)
*/
@Override
- public String getMessage(String key)
+ public String getMessage(String key, Map<String, Object> vars)
{
final FormComponent<T> formComponent = FormComponent.this;
@@ -131,12 +131,12 @@ public abstract class FormComponent<T> extends LabeledWebMarkupContainer
String prefix = formComponent.getValidatorKeyPrefix();
String message = null;
- // first try the full form of key [form-component-id].[key]
+ // first try the full form of key [form-component-id].[prefix].[key]
String resource = getId() + "." + prefix(prefix, key);
message = getString(localizer, resource, formComponent);
// if not found, try a more general form (without prefix)
- // [form-component-id].[prefix].[key]
+ // [form-component-id].[key]
if (Strings.isEmpty(message) && Strings.isEmpty(prefix))
{
resource = getId() + "." + key;
@@ -163,6 +163,10 @@ public abstract class FormComponent<T> extends LabeledWebMarkupContainer
{
message = null;
}
+ else
+ {
+ message = substitute(message, addDefaultVars(vars));
+ }
return message;
}
@@ -195,17 +199,38 @@ public abstract class FormComponent<T> extends LabeledWebMarkupContainer
return localizer.getString(key, component, "");
}
- /**
- * @see org.apache.wicket.validation.IErrorMessageSource#substitute(java.lang.String,
- * java.util.Map)
- */
- @Override
- public String substitute(String string, Map<String, Object> vars)
+ private String substitute(String string, final Map<String, Object> vars)
throws IllegalStateException
{
- return new MapVariableInterpolator(string, addDefaultVars(vars), Application.get()
+ return new VariableInterpolator(string, Application.get()
.getResourceSettings()
- .getThrowExceptionOnMissingResource()).toString();
+ .getThrowExceptionOnMissingResource())
+ {
+ private static final long serialVersionUID = 1L;
+
+ @SuppressWarnings({ "rawtypes", "unchecked" })
+ @Override
+ protected String getValue(String variableName)
+ {
+ Object value = vars.get(variableName);
+ if (value == null)
+ {
+ return null;
+ }
+ else
+ {
+ IConverter converter = getConverter(value.getClass());
+ if (converter == null)
+ {
+ return Strings.toString(value);
+ }
+ else
+ {
+ return converter.convertToString(value, getLocale());
+ }
+ }
+ }
+ }.toString();
}
/**
http://git-wip-us.apache.org/repos/asf/wicket/blob/c5d26ae9/wicket-core/src/main/java/org/apache/wicket/validation/IErrorMessageSource.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/validation/IErrorMessageSource.java b/wicket-core/src/main/java/org/apache/wicket/validation/IErrorMessageSource.java
index fec571e..da67311 100644
--- a/wicket-core/src/main/java/org/apache/wicket/validation/IErrorMessageSource.java
+++ b/wicket-core/src/main/java/org/apache/wicket/validation/IErrorMessageSource.java
@@ -18,7 +18,6 @@ package org.apache.wicket.validation;
import java.util.Map;
-
/**
* Interface representing a message source that stores messages by key and can perform variable
* substitution.
@@ -33,27 +32,9 @@ public interface IErrorMessageSource
*
* @param key
* a message key
- * @return message or null if not found
- */
- String getMessage(String key);
-
- /**
- * Performs variable substitution on the given <code>String</code> using variables declared in
- * the <code>vars</code> <code>Map</code>.
- * <p>
- * Variables in the message are identified using <code>${varname}</code> syntax.
- *
- * @param string
- * a <code>String</code> to be altered
* @param vars
- * a <code>Map</code> of variables to process
- *
- * @throws IllegalStateException
- * if a variable defined in the given <code>String</code> cannot be found in the
- * <code>vars</code> <code>Map</code>
- *
- * @return the given <code>String</code> with the variables substituted
+ * variables to substitute
+ * @return message or null if not found
*/
- // FIXME 2.0 this doesnt need to be in this interface, its just a straight var substitution
- String substitute(String string, Map<String, Object> vars) throws IllegalStateException;
-}
+ String getMessage(String key, Map<String, Object> vars);
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/wicket/blob/c5d26ae9/wicket-core/src/main/java/org/apache/wicket/validation/ValidationError.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/validation/ValidationError.java b/wicket-core/src/main/java/org/apache/wicket/validation/ValidationError.java
index f9a2e8c..61e82e9 100644
--- a/wicket-core/src/main/java/org/apache/wicket/validation/ValidationError.java
+++ b/wicket-core/src/main/java/org/apache/wicket/validation/ValidationError.java
@@ -237,6 +237,9 @@ public final class ValidationError implements IValidationError
@Override
public final Serializable getErrorMessage(IErrorMessageSource messageSource)
{
+
+ final Map<String, Object> p = (vars != null) ? vars : EMPTY_VARS;
+
String errorMessage = null;
if (keys != null)
@@ -244,7 +247,7 @@ public final class ValidationError implements IValidationError
// try any message keys ...
for (String key : keys)
{
- errorMessage = messageSource.getMessage(key);
+ errorMessage = messageSource.getMessage(key, vars);
if (errorMessage != null)
{
break;
@@ -258,12 +261,6 @@ public final class ValidationError implements IValidationError
errorMessage = message;
}
- // if a message was found perform variable substitution
- if (errorMessage != null)
- {
- final Map<String, Object> p = (vars != null) ? vars : EMPTY_VARS;
- errorMessage = messageSource.substitute(errorMessage, p);
- }
return new ValidationErrorFeedback(this, errorMessage);
}
http://git-wip-us.apache.org/repos/asf/wicket/blob/c5d26ae9/wicket-core/src/test/java/org/apache/wicket/markup/html/form/LocalizedErrorMessageTest.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/markup/html/form/LocalizedErrorMessageTest.java b/wicket-core/src/test/java/org/apache/wicket/markup/html/form/LocalizedErrorMessageTest.java
index 17c128e..b86dfd1 100644
--- a/wicket-core/src/test/java/org/apache/wicket/markup/html/form/LocalizedErrorMessageTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/markup/html/form/LocalizedErrorMessageTest.java
@@ -38,12 +38,10 @@ public class LocalizedErrorMessageTest extends WicketTestCase
LocalizedMessagePage page = new LocalizedMessagePage();
tester.startPage(page);
- tester.getRequest()
- .getPostParameters()
- .setParameterValue(page.integerField.getInputName(), "foo");
+ tester.getRequest().getPostParameters().setParameterValue(page.field.getInputName(), "foo");
tester.submitForm(page.form);
- tester.assertErrorMessages("'Number' moet een geheel getal zijn. ");
+ tester.assertErrorMessages("'Number' moet een getal zijn. ");
tester.getSession().setLocale(new Locale("us"));
tester.clearFeedbackMessages();
@@ -51,13 +49,29 @@ public class LocalizedErrorMessageTest extends WicketTestCase
page = new LocalizedMessagePage();
tester.startPage(page);
- tester.getRequest()
- .getPostParameters()
- .setParameterValue(page.integerField.getInputName(), "foo");
+ tester.getRequest().getPostParameters().setParameterValue(page.field.getInputName(), "foo");
tester.submitForm(page.form);
- tester.assertErrorMessages("'Number' is not a valid Integer.");
+ tester.assertErrorMessages("'Number' is not a valid Double.");
+ }
+
+ /**
+ * WICKET-4608 vars should be properly converted
+ */
+ @Test
+ public void testConvertedVars()
+ {
+ tester.getSession().setLocale(new Locale("de"));
+
+ LocalizedMessagePage page = new LocalizedMessagePage();
+ tester.startPage(page);
+
+ tester.getRequest().getPostParameters().setParameterValue(page.field.getInputName(), "20");
+ tester.submitForm(page.form);
+
+ // decimal separator is ',' in German
+ tester.assertErrorMessages("Number muss zwischen 0,5 und 1,5 liegen.");
}
/**
@@ -75,13 +89,11 @@ public class LocalizedErrorMessageTest extends WicketTestCase
LocalizedMessagePage page = new LocalizedMessagePage();
tester.startPage(page);
- tester.getRequest()
- .getPostParameters()
- .setParameterValue(page.integerField.getInputName(), "foo");
+ tester.getRequest().getPostParameters().setParameterValue(page.field.getInputName(), "foo");
tester.submitForm(page.form);
- tester.assertErrorMessages("'Number' ist kein g\u00FCltiger Wert f\u00FCr 'Integer'.");
+ tester.assertErrorMessages("'Number' ist kein g\u00FCltiger Wert f\u00FCr 'Double'.");
tester.getSession().setLocale(new Locale("pl"));
tester.clearFeedbackMessages();
@@ -89,11 +101,9 @@ public class LocalizedErrorMessageTest extends WicketTestCase
page = new LocalizedMessagePage();
tester.startPage(page);
- tester.getRequest()
- .getPostParameters()
- .setParameterValue(page.integerField.getInputName(), "foo");
+ tester.getRequest().getPostParameters().setParameterValue(page.field.getInputName(), "foo");
tester.submitForm(page.form);
- tester.assertErrorMessages("'Number' nie jest w\u0142a\u015Bciwym Integer.");
+ tester.assertErrorMessages("'Number' nie jest w\u0142a\u015Bciwym Double.");
}
}
http://git-wip-us.apache.org/repos/asf/wicket/blob/c5d26ae9/wicket-core/src/test/java/org/apache/wicket/markup/html/form/LocalizedMessagePage.html
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/markup/html/form/LocalizedMessagePage.html b/wicket-core/src/test/java/org/apache/wicket/markup/html/form/LocalizedMessagePage.html
index 4b70fc5..3e4d69c 100644
--- a/wicket-core/src/test/java/org/apache/wicket/markup/html/form/LocalizedMessagePage.html
+++ b/wicket-core/src/test/java/org/apache/wicket/markup/html/form/LocalizedMessagePage.html
@@ -5,7 +5,7 @@
<body>
<form wicket:id="form">
<div wicket:id="feedback"></div>
- <input type="text" wicket:id="integer" />
+ <input type="text" wicket:id="field" />
<input type="submit" value="submit" />
</form>
</body>
http://git-wip-us.apache.org/repos/asf/wicket/blob/c5d26ae9/wicket-core/src/test/java/org/apache/wicket/markup/html/form/LocalizedMessagePage.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/markup/html/form/LocalizedMessagePage.java b/wicket-core/src/test/java/org/apache/wicket/markup/html/form/LocalizedMessagePage.java
index 7c2855a..3fa2c55 100644
--- a/wicket-core/src/test/java/org/apache/wicket/markup/html/form/LocalizedMessagePage.java
+++ b/wicket-core/src/test/java/org/apache/wicket/markup/html/form/LocalizedMessagePage.java
@@ -19,6 +19,7 @@ package org.apache.wicket.markup.html.form;
import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.markup.html.panel.FeedbackPanel;
import org.apache.wicket.model.Model;
+import org.apache.wicket.validation.validator.RangeValidator;
/**
* @author dashorst
@@ -31,7 +32,7 @@ public class LocalizedMessagePage extends WebPage
/** */
public Form<Void> form;
/** */
- public TextField<Integer> integerField;
+ public TextField<Double> field;
/** */
public FeedbackPanel feedback;
@@ -42,9 +43,10 @@ public class LocalizedMessagePage extends WebPage
{
add(form = new Form<Void>("form"));
- integerField = new TextField<Integer>("integer", Integer.class);
- integerField.setLabel(Model.of("Number"));
- form.add(integerField);
+ field = new TextField<Double>("field", Double.class);
+ field.setLabel(Model.of("Number"));
+ field.add(new RangeValidator<Double>(0.5d, 1.5d));
+ form.add(field);
form.add(feedback = new FeedbackPanel("feedback"));
}