You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by mg...@apache.org on 2014/09/22 22:48:44 UTC
git commit: WICKET-5692: improved Unresolvable Property Message
Repository: wicket
Updated Branches:
refs/heads/master a5a9ee1bb -> 09fc316b7
WICKET-5692: improved Unresolvable Property Message
Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/09fc316b
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/09fc316b
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/09fc316b
Branch: refs/heads/master
Commit: 09fc316b768968f99c2a80bda1dbaee7a596eb12
Parents: a5a9ee1
Author: Thibault Kruse <th...@comsysto.com>
Authored: Mon Sep 22 22:08:19 2014 +0200
Committer: Martin Tzvetanov Grigorov <mg...@apache.org>
Committed: Mon Sep 22 22:48:11 2014 +0200
----------------------------------------------------------------------
.../bean/validation/PropertyValidator.java | 44 +++++++++++++++++---
.../PropertyValidatorRequiredTest.java | 24 +++++++++--
2 files changed, 59 insertions(+), 9 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/wicket/blob/09fc316b/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/PropertyValidator.java
----------------------------------------------------------------------
diff --git a/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/PropertyValidator.java b/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/PropertyValidator.java
index ea1976a..838dbd8 100644
--- a/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/PropertyValidator.java
+++ b/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/PropertyValidator.java
@@ -18,6 +18,8 @@ import org.apache.wicket.behavior.Behavior;
import org.apache.wicket.markup.ComponentTag;
import org.apache.wicket.markup.html.form.FormComponent;
import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.IPropertyReflectionAwareModel;
+import org.apache.wicket.model.IWrapModel;
import org.apache.wicket.model.PropertyModel;
import org.apache.wicket.validation.IValidatable;
import org.apache.wicket.validation.IValidator;
@@ -92,18 +94,48 @@ public class PropertyValidator<T> extends Behavior implements IValidator<T>
this.groups_ = groups;
}
+ /**
+ * To support debugging, trying to provide useful information where possible
+ * @return
+ */
+ private String createUnresolvablePropertyMessage(FormComponent<T> component) {
+ String baseMessage = "Could not resolve Bean Property from component: " + component
+ + ". (Hints:) Possible causes are a typo in the PropertyExpression, a null reference or a model that does not work in combination with a "
+ + IPropertyResolver.class.getSimpleName() + ".";
+
+ IModel<?> model = component.getModel();
+ // Code sadly copied over from DefaultPropertyResolver
+ while (true)
+ {
+ if (model == null)
+ {
+ break;
+ }
+ if (model instanceof IPropertyReflectionAwareModel)
+ {
+ break;
+ }
+ if (model instanceof IWrapModel<?>)
+ {
+ model = ((IWrapModel<?>)model).getWrappedModel();
+ continue;
+ }
+ }
+ if (model != null) {
+ baseMessage += " Model : " + model;
+ }
+ return baseMessage;
+ }
+
private Property getProperty()
{
if (property_ == null)
{
- property_ = BeanValidationConfiguration.get().resolveProperty(component);
+ BeanValidationContext config = BeanValidationConfiguration.get();
+ property_ = config.resolveProperty(component);
if (property_ == null)
{
- throw new IllegalStateException(
- "Could not resolve Property from component: " + component
- + ". Either specify the Property in the constructor or use a model that works in combination with a "
- + IPropertyResolver.class.getSimpleName()
- + " to resolve the Property automatically");
+ throw new IllegalStateException(createUnresolvablePropertyMessage(component));
}
}
return property_;
http://git-wip-us.apache.org/repos/asf/wicket/blob/09fc316b/wicket-bean-validation/src/test/java/org/apache/wicket/bean/validation/PropertyValidatorRequiredTest.java
----------------------------------------------------------------------
diff --git a/wicket-bean-validation/src/test/java/org/apache/wicket/bean/validation/PropertyValidatorRequiredTest.java b/wicket-bean-validation/src/test/java/org/apache/wicket/bean/validation/PropertyValidatorRequiredTest.java
index 8edea4c..805a5cf 100644
--- a/wicket-bean-validation/src/test/java/org/apache/wicket/bean/validation/PropertyValidatorRequiredTest.java
+++ b/wicket-bean-validation/src/test/java/org/apache/wicket/bean/validation/PropertyValidatorRequiredTest.java
@@ -3,6 +3,10 @@ package org.apache.wicket.bean.validation;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
+import java.util.Arrays;
+import java.util.List;
+
+import javax.validation.Valid;
import javax.validation.constraints.NotNull;
import org.apache.wicket.MarkupContainer;
@@ -66,6 +70,8 @@ public class PropertyValidatorRequiredTest
assertFalse(page.input19.isRequired());
assertFalse(page.input20.isRequired());
+ assertTrue(page.input21.isRequired());
+
}
/**
@@ -100,7 +106,7 @@ public class PropertyValidatorRequiredTest
private TestBean bean = new TestBean();
private FormComponent<String> input1, input2, input3, input4, input5, input6, input7,
input8, input9, input10, input11, input12, input13, input14, input15, input16, input17,
- input18, input19, input20;
+ input18, input19, input20, input21;
public TestPage()
{
@@ -155,9 +161,12 @@ public class PropertyValidatorRequiredTest
input20 = new TextField<String>("input20", new PropertyModel<String>(this,
"bean.propertyOneTwo")).add(new PropertyValidator<String>(GroupThree.class));
+ input21 = new TextField<String>("input21", new PropertyModel<String>(this,
+ "bean.subBeanList[0].property")).add(new PropertyValidator<>());
+
form.add(input1, input2, input3, input4, input5, input6, input7, input8, input9,
input10, input11, input12, input13, input14, input15, input16, input17, input18,
- input19, input20);
+ input19, input20, input21);
}
@@ -166,7 +175,7 @@ public class PropertyValidatorRequiredTest
Class<?> containerClass)
{
return new StringResourceStream(
- "<form wicket:id='form'><input wicket:id='input1'/><input wicket:id='input2'/><input wicket:id='input3'/><input wicket:id='input4'/><input wicket:id='input5'/><input wicket:id='input6'/><input wicket:id='input7'/><input wicket:id='input8'/><input wicket:id='input9'/><input wicket:id='input10'/><input wicket:id='input11'/><input wicket:id='input12'/><input wicket:id='input13'/><input wicket:id='input14'/><input wicket:id='input15'/><input wicket:id='input16'/><input wicket:id='input17'/><input wicket:id='input18'/><input wicket:id='input19'/><input wicket:id='input20'/></form>");
+ "<form wicket:id='form'><input wicket:id='input1'/><input wicket:id='input2'/><input wicket:id='input3'/><input wicket:id='input4'/><input wicket:id='input5'/><input wicket:id='input6'/><input wicket:id='input7'/><input wicket:id='input8'/><input wicket:id='input9'/><input wicket:id='input10'/><input wicket:id='input11'/><input wicket:id='input12'/><input wicket:id='input13'/><input wicket:id='input14'/><input wicket:id='input15'/><input wicket:id='input16'/><input wicket:id='input17'/><input wicket:id='input18'/><input wicket:id='input19'/><input wicket:id='input20'/><input wicket:id='input21'/></form>");
}
}
@@ -183,8 +192,17 @@ public class PropertyValidatorRequiredTest
{
}
+ public static class TestContainedBean {
+ @NotNull
+ String property;
+ }
+
public static class TestBean
{
+ @Valid
+ @NotNull
+ List<TestContainedBean> subBeanList = Arrays.asList(new TestContainedBean());
+
@NotNull
String property;