You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by th...@apache.org on 2014/06/05 23:58:43 UTC
git commit: Client validation was missing validations from
annotations. TAP5-1718
Repository: tapestry-5
Updated Branches:
refs/heads/master 0c1790d43 -> 7c9a72cfb
Client validation was missing validations from annotations. TAP5-1718
Project: http://git-wip-us.apache.org/repos/asf/tapestry-5/repo
Commit: http://git-wip-us.apache.org/repos/asf/tapestry-5/commit/7c9a72cf
Tree: http://git-wip-us.apache.org/repos/asf/tapestry-5/tree/7c9a72cf
Diff: http://git-wip-us.apache.org/repos/asf/tapestry-5/diff/7c9a72cf
Branch: refs/heads/master
Commit: 7c9a72cfb5e2e23eaf00a36f1a01ab9186928fef
Parents: 0c1790d
Author: Thiago H. de Paula Figueiredo <th...@apache.org>
Authored: Thu Jun 5 18:58:24 2014 -0300
Committer: Thiago H. de Paula Figueiredo <th...@apache.org>
Committed: Thu Jun 5 18:58:24 2014 -0300
----------------------------------------------------------------------
.../beanvalidator/BeanFieldValidator.java | 78 ++++++++++++++------
.../TapestryBeanValidationIntegrationTests.java | 12 ++-
.../example/testapp/pages/NestedObjectDemo.java | 14 +++-
.../src/test/webapp/Index.tml | 5 +-
.../src/test/webapp/NestedObjectDemo.tml | 3 +-
5 files changed, 87 insertions(+), 25 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/7c9a72cf/tapestry-beanvalidator/src/main/java/org/apache/tapestry5/internal/beanvalidator/BeanFieldValidator.java
----------------------------------------------------------------------
diff --git a/tapestry-beanvalidator/src/main/java/org/apache/tapestry5/internal/beanvalidator/BeanFieldValidator.java b/tapestry-beanvalidator/src/main/java/org/apache/tapestry5/internal/beanvalidator/BeanFieldValidator.java
index febe9e9..db3c2d2 100644
--- a/tapestry-beanvalidator/src/main/java/org/apache/tapestry5/internal/beanvalidator/BeanFieldValidator.java
+++ b/tapestry-beanvalidator/src/main/java/org/apache/tapestry5/internal/beanvalidator/BeanFieldValidator.java
@@ -84,13 +84,12 @@ public class BeanFieldValidator implements FieldValidator
final Validator validator = validatorFactory.getValidator();
- BeanDescriptor beanDescriptor = validator.getConstraintsForClass(beanValidationContext.getBeanType());
-
- String currentProperty = beanValidationContext.getCurrentProperty();
+ final String currentProperty = beanValidationContext.getCurrentProperty();
if (currentProperty == null) return;
-
- PropertyDescriptor propertyDescriptor = beanDescriptor.getConstraintsForProperty(currentProperty);
+
+ final ValidationInfo validationInfo = getValidationInfo(beanValidationContext, currentProperty, validator);
+ final PropertyDescriptor propertyDescriptor = validationInfo.getPropertyDescriptor();
if (propertyDescriptor == null) return;
@@ -144,26 +143,13 @@ public class BeanFieldValidator implements FieldValidator
if (currentProperty == null) return;
- Class<?> beanType = beanValidationContext.getBeanType();
- String[] path = currentProperty.split("\\.");
- BeanDescriptor beanDescriptor = validator.getConstraintsForClass(beanType);
-
- for (int i = 1; i < path.length - 1; i++)
- {
- Class<?> constrainedPropertyClass = getConstrainedPropertyClass(beanDescriptor, path[i]);
- if (constrainedPropertyClass != null) {
- beanType = constrainedPropertyClass;
- beanDescriptor = validator.getConstraintsForClass(beanType);
- }
- }
-
- final String propertyName = path[path.length - 1];
- PropertyDescriptor propertyDescriptor = beanDescriptor.getConstraintsForProperty(propertyName);
+ final ValidationInfo validationInfo = getValidationInfo(beanValidationContext, currentProperty, validator);
+ final PropertyDescriptor propertyDescriptor = validationInfo.getPropertyDescriptor();
if (propertyDescriptor == null) return;
final Set<ConstraintViolation<Object>> violations = validator.validateValue(
- (Class<Object>) beanType, propertyName,
+ (Class<Object>) validationInfo.getBeanType(), validationInfo.getPropertyName(),
value, beanValidationGroupSource.get());
if (violations.isEmpty())
@@ -228,4 +214,54 @@ public class BeanFieldValidator implements FieldValidator
}
});
}
+
+ final private static ValidationInfo getValidationInfo(BeanValidationContext beanValidationContext, String currentProperty, Validator validator) {
+ Class<?> beanType = beanValidationContext.getBeanType();
+ String[] path = currentProperty.split("\\.");
+ BeanDescriptor beanDescriptor = validator.getConstraintsForClass(beanType);
+
+ for (int i = 1; i < path.length - 1; i++)
+ {
+ Class<?> constrainedPropertyClass = getConstrainedPropertyClass(beanDescriptor, path[i]);
+ if (constrainedPropertyClass != null) {
+ beanType = constrainedPropertyClass;
+ beanDescriptor = validator.getConstraintsForClass(beanType);
+ }
+ }
+
+ final String propertyName = path[path.length - 1];
+ PropertyDescriptor propertyDescriptor = beanDescriptor.getConstraintsForProperty(propertyName);
+ return new ValidationInfo(beanType, propertyName, propertyDescriptor);
+ }
+
+ final private static class ValidationInfo {
+ final private Class<?> beanType;
+ final private String propertyName;
+ final private PropertyDescriptor propertyDescriptor;
+ public ValidationInfo(Class<?> beanType, String propertyName,
+ PropertyDescriptor propertyDescriptor)
+ {
+ super();
+ this.beanType = beanType;
+ this.propertyName = propertyName;
+ this.propertyDescriptor = propertyDescriptor;
+ }
+
+ public Class<?> getBeanType()
+ {
+ return beanType;
+ }
+
+ public String getPropertyName()
+ {
+ return propertyName;
+ }
+
+ public PropertyDescriptor getPropertyDescriptor()
+ {
+ return propertyDescriptor;
+ }
+
+ }
+
}
http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/7c9a72cf/tapestry-beanvalidator/src/test/java/org/apache/tapestry5/beanvalidator/integration/TapestryBeanValidationIntegrationTests.java
----------------------------------------------------------------------
diff --git a/tapestry-beanvalidator/src/test/java/org/apache/tapestry5/beanvalidator/integration/TapestryBeanValidationIntegrationTests.java b/tapestry-beanvalidator/src/test/java/org/apache/tapestry5/beanvalidator/integration/TapestryBeanValidationIntegrationTests.java
index 2b41abe..85d4d00 100644
--- a/tapestry-beanvalidator/src/test/java/org/apache/tapestry5/beanvalidator/integration/TapestryBeanValidationIntegrationTests.java
+++ b/tapestry-beanvalidator/src/test/java/org/apache/tapestry5/beanvalidator/integration/TapestryBeanValidationIntegrationTests.java
@@ -259,7 +259,7 @@ public class TapestryBeanValidationIntegrationTests extends SeleniumTestCase
final String locatorTemplate = "//p[@data-error-block-for='%s']";
- openLinks("NestedObject Demo");
+ openLinks("NestedObject Demo (client validation disabled)");
clickAndWait(SUBMIT);
@@ -269,6 +269,16 @@ public class TapestryBeanValidationIntegrationTests extends SeleniumTestCase
getText(String.format(locatorTemplate, "simpleNotNullProperty")));
assertEquals("Min Value must be greater than or equal to 6",
getText(String.format(locatorTemplate, "minValue")));
+
+ openLinks("NestedObject Demo (client validation enabled)");
+
+ click(SUBMIT);
+ assertEquals("You must provide a value for Not Null String.",
+ getText(String.format(locatorTemplate, "notNullString")));
+ assertEquals("Simple Not Null Property may not be null",
+ getText(String.format(locatorTemplate, "simpleNotNullProperty")));
+ assertEquals("Min Value must be greater than or equal to 6",
+ getText(String.format(locatorTemplate, "minValue")));
}
http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/7c9a72cf/tapestry-beanvalidator/src/test/java/org/example/testapp/pages/NestedObjectDemo.java
----------------------------------------------------------------------
diff --git a/tapestry-beanvalidator/src/test/java/org/example/testapp/pages/NestedObjectDemo.java b/tapestry-beanvalidator/src/test/java/org/example/testapp/pages/NestedObjectDemo.java
index f6406bd..f365bdd 100644
--- a/tapestry-beanvalidator/src/test/java/org/example/testapp/pages/NestedObjectDemo.java
+++ b/tapestry-beanvalidator/src/test/java/org/example/testapp/pages/NestedObjectDemo.java
@@ -5,6 +5,7 @@ import org.apache.tapestry5.alerts.Duration;
import org.apache.tapestry5.alerts.Severity;
import org.apache.tapestry5.annotations.Persist;
import org.apache.tapestry5.annotations.Property;
+import org.apache.tapestry5.corelib.ClientValidation;
import org.apache.tapestry5.ioc.annotations.Inject;
import org.example.testapp.entities.ComplexBean;
import org.example.testapp.entities.SomeSimpleBean;
@@ -23,7 +24,10 @@ public class NestedObjectDemo
@Inject
private AlertManager alertManager;
- public void onActivate() {
+ private boolean enableClientValidation;
+
+ public void onActivate(boolean enableClientValidation) {
+ this.enableClientValidation = enableClientValidation;
if (complexBean == null) {
complexBean = new ComplexBean();
SomeSimpleBean otherSimpleBean = new SomeSimpleBean();
@@ -34,5 +38,13 @@ public class NestedObjectDemo
void onSuccess() {
alertManager.alert(Duration.TRANSIENT, Severity.SUCCESS, "Validation passed");
}
+
+ public ClientValidation getClientValidation() {
+ return enableClientValidation ? ClientValidation.SUBMIT : ClientValidation.NONE;
+ }
+
+ Boolean onPassivate() {
+ return enableClientValidation;
+ }
}
http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/7c9a72cf/tapestry-beanvalidator/src/test/webapp/Index.tml
----------------------------------------------------------------------
diff --git a/tapestry-beanvalidator/src/test/webapp/Index.tml b/tapestry-beanvalidator/src/test/webapp/Index.tml
index 6734533..abc9dfa 100644
--- a/tapestry-beanvalidator/src/test/webapp/Index.tml
+++ b/tapestry-beanvalidator/src/test/webapp/Index.tml
@@ -28,7 +28,10 @@
<t:pagelink page="ComplexBeanDemo">ComplexBean Demo</t:pagelink>
</li>
<li>
- <t:pagelink page="NestedObjectDemo">NestedObject Demo</t:pagelink>
+ <t:pagelink page="NestedObjectDemo" t:context="false">NestedObject Demo (client validation disabled)</t:pagelink>
+ </li>
+ <li>
+ <t:pagelink page="NestedObjectDemo" t:context="true">NestedObject Demo (client validation enabled)</t:pagelink>
</li>
</ul>
</body>
http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/7c9a72cf/tapestry-beanvalidator/src/test/webapp/NestedObjectDemo.tml
----------------------------------------------------------------------
diff --git a/tapestry-beanvalidator/src/test/webapp/NestedObjectDemo.tml b/tapestry-beanvalidator/src/test/webapp/NestedObjectDemo.tml
index a42a1bc..b6fb17f 100644
--- a/tapestry-beanvalidator/src/test/webapp/NestedObjectDemo.tml
+++ b/tapestry-beanvalidator/src/test/webapp/NestedObjectDemo.tml
@@ -1,7 +1,8 @@
<html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_1_0.xsd">
<body>
+ <p>Client validation: ${clientValidation}</p>
<t:alerts/>
- <t:form clientValidation="none" validate="complexBean">
+ <t:form clientValidation="prop:clientValidation" validate="complexBean">
<t:errors/>
<t:textfield t:id="notNullString" t:mixins="FormGroup" t:validate="required"/>
<t:textfield t:id="simpleNotNullProperty" t:value="complexBean.simpleNotNullProperty" t:mixins="FormGroup"/>