TAP5-1981: convert client-side values back to server-side values for validation
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 85d4d00..bfd9999 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
@@ -281,5 +281,24 @@
getText(String.format(locatorTemplate, "minValue")));
}
+
+ //TAP5-1981
+ @Test
+ public void validate_with_radiogroup() throws Exception
+ {
+ openLinks("Radio Group with Validation");
+
+ click("//div[@class='test1']/form/input[@value='3']");
+
+ clickAndWait("//div[@class='test1']/form/input[@type='submit']");
+
+ assertTextPresent("Radiogroup requires a value no larger than 2.");
+
+ click("//div[@class='test2']/form/input[@value='3']");
+
+ clickAndWait("//div[@class='test2']/form/div/div/input[@type='submit']");
+
+ assertTextPresent("Group2 must be less than or equal to 2");
+ }
}
\ No newline at end of file
diff --git a/tapestry-beanvalidator/src/test/java/org/example/testapp/entities/BeanForTAP1981.java b/tapestry-beanvalidator/src/test/java/org/example/testapp/entities/BeanForTAP1981.java
new file mode 100644
index 0000000..7274604
--- /dev/null
+++ b/tapestry-beanvalidator/src/test/java/org/example/testapp/entities/BeanForTAP1981.java
@@ -0,0 +1,18 @@
+package org.example.testapp.entities;
+
+import javax.validation.constraints.Max;
+
+public class BeanForTAP1981 {
+
+ private int number;
+
+ @Max(2)
+ public int getNumber() {
+ return number;
+ }
+
+ public void setNumber(final int value) {
+ number = value;
+ }
+
+}
diff --git a/tapestry-beanvalidator/src/test/java/org/example/testapp/pages/RadioGroupWithValidation.java b/tapestry-beanvalidator/src/test/java/org/example/testapp/pages/RadioGroupWithValidation.java
new file mode 100644
index 0000000..8531029
--- /dev/null
+++ b/tapestry-beanvalidator/src/test/java/org/example/testapp/pages/RadioGroupWithValidation.java
@@ -0,0 +1,35 @@
+package org.example.testapp.pages;
+
+import org.apache.tapestry5.FieldValidator;
+import org.apache.tapestry5.annotations.Component;
+import org.apache.tapestry5.annotations.Environmental;
+import org.apache.tapestry5.annotations.Persist;
+import org.apache.tapestry5.corelib.components.RadioGroup;
+import org.apache.tapestry5.services.PropertyEditContext;
+import org.example.testapp.entities.BeanForTAP1981;
+
+public class RadioGroupWithValidation {
+
+ @Component(parameters = { "value=bean.number", "validate=prop:beanValidator" })
+ private RadioGroup group2;
+
+ /* */
+ @Persist
+ private BeanForTAP1981 bean;
+
+ /* */
+ @Environmental
+ private PropertyEditContext context;
+
+ public BeanForTAP1981 getBean() {
+ if (bean == null) {
+ bean = new BeanForTAP1981();
+ }
+ return bean;
+ }
+
+ public FieldValidator getBeanValidator() {
+ return context.getValidator(group2);
+ }
+
+}
diff --git a/tapestry-beanvalidator/src/test/webapp/Index.tml b/tapestry-beanvalidator/src/test/webapp/Index.tml
index abc9dfa..e19eafb 100644
--- a/tapestry-beanvalidator/src/test/webapp/Index.tml
+++ b/tapestry-beanvalidator/src/test/webapp/Index.tml
@@ -32,6 +32,9 @@
</li>
<li>
<t:pagelink page="NestedObjectDemo" t:context="true">NestedObject Demo (client validation enabled)</t:pagelink>
+ </li>
+ <li>
+ <t:pagelink page="RadioGroupWithValidation">Radio Group with Validation</t:pagelink>
</li>
</ul>
</body>
diff --git a/tapestry-beanvalidator/src/test/webapp/RadioGroupWithValidation.tml b/tapestry-beanvalidator/src/test/webapp/RadioGroupWithValidation.tml
new file mode 100644
index 0000000..f1123a1
--- /dev/null
+++ b/tapestry-beanvalidator/src/test/webapp/RadioGroupWithValidation.tml
@@ -0,0 +1,32 @@
+<html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_3.xsd"
+ xmlns:p="tapestry:parameter">
+ <body>
+ <div class="test1">
+ <h1>test 1</h1>
+ <t:form>
+
+ <t:errors/>
+ <t:RadioGroup value="bean.number" validate="max=2">
+ <t:radio value="1"/>1<br/>
+ <t:radio value="2"/>2<br/>
+ <t:radio value="3"/>3<br/>
+ </t:RadioGroup>
+
+ <t:submit/>
+ </t:form>
+ </div>
+ <div class="test2">
+
+ <h1>test 2</h1>
+ <t:BeanEditForm object="bean">
+ <p:number>
+ <t:comp t:id="group2">
+ <t:radio value="1"/>1<br/>
+ <t:radio value="2"/>2<br/>
+ <t:radio value="3"/>3<br/>
+ </t:comp>
+ </p:number>
+ </t:BeanEditForm>
+ </div>
+ </body>
+</html>
\ No newline at end of file
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/RadioGroup.java b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/RadioGroup.java
index cd594c1..053f056 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/RadioGroup.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/RadioGroup.java
@@ -170,19 +170,20 @@
return;
}
String rawValue = request.getParameter(controlName);
+ Object convertedValue = encoder.toValue(rawValue);
tracker.recordInput(this, rawValue);
try
{
if (validate != null)
- fieldValidationSupport.validate(rawValue, resources, validate);
+ fieldValidationSupport.validate(convertedValue, resources, validate);
}
catch (ValidationException ex)
{
tracker.recordError(this, ex.getMessage());
}
- value = encoder.toValue(rawValue);
+ value = convertedValue;
}
/**